我们有一个表,其关键字criticality_id存储为0, 1, 2, 3
,分别代表undefined, A,B,C
。我的一位同事希望显示所有关键项C
,但他意外地用错误的查询查询数据库:
select * from mytable where criticality_id = 'C'
这令人惊讶地检索了所有具有criticality_id 0的项目。
经过几次谷歌搜索,我知道MySQL会自动进行类型转换,所以这里'C' = 0
。查询结果在技术上是正确的,但肯定不是他想要的。我的问题是如何避免这种不匹配,返回严格匹配的结果。如果没有匹配,则不返回任何内容。
答案 0 :(得分:1)
一个简单但有点折衷的解决方案是将数据类型更改为CHAR(1)
。
然后:
criticality_id = '0' --> true when criticality is 0
criticality_id = 0 --> true when criticality is 0
criticality_id = 'C' --> false when criticality is 0
我不知道是否有删除隐式转化的设置。
答案 1 :(得分:0)
除非您使用的语言自动设置数据类型。您需要记录表格的架构。接收具有未知类型的随机数据是不明智的。
除了少数几个例外情况外,没有任何东西应该是你正在使用的“神秘数据”。