场景:
字段: status (值为 1,2,3)
类型: tinyint 长度: 1(有符号的)
结果: 查询出来的数据列表, 状态值不管是 1 还是 2 还是 3, 都是 "boolean true"
分析并解决:
分析: 由于 MySQL 中没有 boolean 类型, 所以会用到 tinyint[1] 类型来表示, 在 MySQL 中 boolean=tinyint[1]
解决: tinyint 类型长度的问题, 当我把长度改成 4 时, 查询结果就正常了
猜想并使用新的方法解决:
如果不改变类型的长度, 怎么让查询的结果正确呢? 需要在查询语句上面做修改了
在你需要执行的 sql 语句中, 把这个状态字段 * 1, 结果就会得到数据库存的值了 (注意: 记得加别名, 不然查询出来的就是 status*1 => '1')
- SELECT
- id,
- name,
- status*1 AS status,
- add_time
- FROM
- tableName
- WHERE
- play_type = 0
总结一下以上的两种解决方法:
1. 修改 tinyint 类型的长度
2. 在查询的 sql 语句上面做修改
所以由这里可以看出, 当你使用 tinyint[1] 来存储超过 0,1 两个值以外的值, 比如存储 2, 那这个 2 就是脏数据就用 tinyint[4],tinyint[1] 只适用于存储 0 和 1 两个值, 也即真和假, true 和 false
一般的, 咱们如果存的是纯数字的话, 建议用 tinyint, 如果是字符串, 且是固定长度的, 建议用 char, 而 enum 的枚举字段, 使用的使用需要慎重考虑, 避免带来不必要的麻烦
来源: http://www.bubuko.com/infodetail-3105398.html