我的意思是如果任何表包含ENUM或SET类型列,我将进行如下查询:
SELECT * FROM `tabname` WHERE `enum_field` = 'case1' OR `enum_field` = 'case2'
它会有效吗? 或者引擎会将存储在enum_field中的数字转换为字符串,将其与模式进行比较(在我的示例中为case1和case2)? 使用此类列的最有效方法是什么?
谢谢!
答案 0 :(得分:1)
您在上面提供的语法是正确的 数据库引擎会将查询中的字符串转换为数字索引,这些索引将在搜索表时使用。
根据 mysql documentation ,您还可以直接通过数字索引进行查询,但这有时会产生意外结果,尤其是当您的任何枚举字符串值都是数字时。
因此,假设“case1”具有索引1,而“case2”具有索引2,则可以像这样重写查询:
SELECT * FROM `tabname` WHERE `enum_field` = 1 OR `enum_field` = 2