由于历史原因,数据库里的 age (即年龄) 用 char(1)来储存。
但是,如果用户信息中年龄大于9,即10岁以上的,我用
select age from userinfo limit 5;的结果是
2
2
3
1
2
都是只读到了首位。有没有办法读全?我用 cast(age as UNSIGNED) 不行。。求高手。
但是,如果用户信息中年龄大于9,即10岁以上的,我用
select age from userinfo limit 5;的结果是
2
2
3
1
2
都是只读到了首位。有没有办法读全?我用 cast(age as UNSIGNED) 不行。。求高手。
尽管是char(1)类型,但是插入大于10的数据还是没问题的。可能有warning.
类似的 int(1) 也可以插入大于10的数据。
而 int(1) 则不同, int(1) 是存储4个字节,只不过是默认显示为1位。
MySQL还支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。当结合可选扩展属性ZEROFILL使用时, 默认补充的空格用零代替。例如,对于声明为INT(5) ZEROFILL的列,值4检索为00004。请注意如果在整数列保存超过显示宽度的一个值,当MySQL为复杂联接生成临时表时会遇到问题,因为在这些情况下MySQL相信数据适合原列宽度。
比如一个人是97岁,你就存'a'进去啊。
select ascii(’a‘) ;
结果是97.
但是还是建议修改该字段类型了。