You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过数值索引而非字面量更新MySQL的SET类型字段

问题原因

你之前的更新语句无法生效是因为REPLACE是字符串处理函数:当你传入数值参数时,MySQL会自动将SET类型的my_col转为逗号分隔的字符串(比如'C,C#'),再去匹配字符串中的'8'或'9'字符,自然匹配不到,因此不会产生任何更新效果。

正确操作方法

MySQL的SET类型本质是按位存储的整数,每个选项对应一个二进制位,直接通过位运算即可实现数值维度的更新,无需处理字符串字面量。

1. 替换指定选项(对应你将8(C#)替换为4(Java)的需求)

逻辑为:先清除要替换的选项对应的位,再添加新选项对应的位:

UPDATE my_set_table 
SET my_col = (my_col & ~8) | 4
WHERE id = 1;
  • & ~8:按位与8的取反值,清除C#对应的二进制位
  • | 4:按位或4,添加Java对应的二进制位
    执行后id=1的my_col值变为1+4=5,对应内容为C,Java,和你用字面量替换的效果完全一致。

2. 直接覆盖整个SET值(对应你将9替换为5的需求)

如果要直接替换整个字段的数值,不需要用REPLACE,直接赋值即可:

UPDATE my_set_table
SET my_col = 5
WHERE id = 1;

其他常见数值操作示例

  • 给指定记录添加Python(对应数值128):
    UPDATE my_set_table SET my_col = my_col | 128 WHERE id = 1;
    
  • 移除指定记录的Kotlin(对应数值32):
    UPDATE my_set_table SET my_col = my_col & ~32 WHERE id = 2;
    
  • 切换JavaScript(对应数值16)的选中状态(有则移除,无则添加):
    UPDATE my_set_table SET my_col = my_col ^ 16 WHERE id = 3;
    

内容的提问来源于stack exchange,提问作者Payel Senapati

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 07:36:02