mysql数据库字段长度问题

ronghua_liu 2010-06-23 11:34:56
在mysql中设计:
id:tinyint,长度是1,输入130显示out of rang,
将其长度设计为5,输入130,为什么还是显示out of rang?

如果说tinyint数据范围是-128 到127,那长度的意义在哪里?
...全文
294 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
iihero_ 2010-06-23
  • 打赏
  • 举报
回复
[Quote=引用楼主 ronghua_liu 的回复:]
在mysql中设计:
id:tinyint,长度是1,输入130显示out of rang,
将其长度设计为5,输入130,为什么还是显示out of rang?

如果说tinyint数据范围是-128 到127,那长度的意义在哪里?
[/Quote]
130已经超出-128到127的范围了。
ACMAIN_CHM 2010-06-23
  • 打赏
  • 举报
回复
MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html

[Quote]MySQL还支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。

显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。

当结合可选扩展属性ZEROFILL使用时, 默认补充的空格用零代替。例如,对于声明为INT(5) ZEROFILL的列,值4检索为00004。请注意如果在整数列保存超过显示宽度的一个值,当MySQL为复杂联接生成临时表时会遇到问题,因为在这些情况下MySQL相信数据适合原列宽度。

[/Quote]
ACMAIN_CHM 2010-06-23
  • 打赏
  • 举报
回复
那个长度,只是显示长度,与实际存储无关,
你的TINYINT,只是一个字节,存储范围是-128 到127。
space_Wind 2010-06-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 space_wind 的回复:]
白话解释,你往数据库里插入 130 的时候,是储存长度,这个是由数据类型来管理的如int,tinyint等,因为你出入的130,超出了tinyint的-128 到127的范围...[/Quote]

引用一下我刚才说的,突然又想到了一个例子,希望可以帮助你。
假如一个公园,它就是数据库,你就是一个数据,你想进入这个公园。这个公园的门是1米{tinyint(1)},可这个公园规定只有-128 到127岁的人才能进入(也就是tinyint),可你偏偏到了130岁,但你的身高是3米。虽然你很有钱,自己把这个门阔到了3米高{tinyint(3)},但是你无法改变你的年龄,你还是130岁,所以这里不是你娱乐的地方。所以数据库报错。
space_Wind 2010-06-23
  • 打赏
  • 举报
回复
白话解释,你往数据库里插入 130 的时候,是储存长度,这个是由数据类型来管理的如int,tinyint等,因为你出入的130,超出了tinyint的-128 到127的范围,所以会报错。但你select的时候,显示在你眼前的这个数字1,3,0这三个数字是实际长度,是由int(11)或tinyint(3)里的参数'11','3'来管理的。
所以tinyint管理的是130这个数字的大小,tinyint里面的参数(3)管理的是组成130的这三个字符:1,3,0的长度。也就是说数字的大小和数字的长度不是一个概念。
虽然有些不符合书面规范,但很容易让人理解。
ACMAIN_CHM 2010-06-23
  • 打赏
  • 举报
回复
[Quote]这个可以举个例子吗?谢谢~[/Quote]帮助文档中有例子。
ronghua_liu 2010-06-23
  • 打赏
  • 举报
回复
该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。

这个可以举个例子吗?谢谢~

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧