如何避免MySQL中错误的数据类型查询

时间:2017-05-12 23:33:14

标签: mysql sql

我们有一个表,其关键字criticality_id存储为0, 1, 2, 3,分别代表undefined, A,B,C。我的一位同事希望显示所有关键项C,但他意外地用错误的查询查询数据库:

select * from mytable where criticality_id = 'C'

这令人惊讶地检索了所有具有criticality_id 0的项目。

经过几次谷歌搜索,我知道MySQL会自动进行类型转换,所以这里'C' = 0。查询结果在技术上是正确的,但肯定不是他想要的。我的问题是如何避免这种不匹配,返回严格匹配的结果。如果没有匹配,则不返回任何内容。

2 个答案:

答案 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)

除非您使用的语言自动设置数据类型。您需要记录表格的架构。接收具有未知类型的随机数据是不明智的。

除了少数几个例外情况外,没有任何东西应该是你正在使用的“神秘数据”。