假设我使用 sql 查询:
select * from table t where t.name = "adam" and t.age > 10;
在“年龄”列中,不仅仅有整数值。还有“老”、“年轻”等值...
此查询的结果将是所有年龄超过 10 岁的 adam,但也包括所有年龄等于字符串值“old”、“young”等之一的 adam...
这是为什么?
最佳答案
此行为的原因是 MySQL Type Conversion 当您将运算符应用于不同类型的数据/列时,这会隐式发生。
对于您发布的示例:通常认为在同一字段中保存不同类型/含义的数据是不好的做法。
我将“age”列的类型设置为“int”,并使其可为空。然后添加另一个名为 about_age
的列,该列可以是具有值 old
和 young
的 ENUM。只要“age”列为 NULL
,您的应用程序就可以检查 about_age
列。只有这样,你的数据意味着什么才完全清楚。
关于mysql - 为什么数学运算符与sql中的字符串交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36472925/