mysql int多少字节

嘿,INT确实很基础,但有时细节很容易混淆。
上次帮助一些内部调试代码,因为INT范围问题卡住了很长时间。

想一想,INT固定为4 字节3 2 位。
这既有优点也有缺点。
优点是存储效率高,查询速度快。
由于长度是固定的,所以很容易被处理器处理。
缺点是数字范围非常宽。
有符号 INT 从 -2 1 4 7 4 8 3 6 4 8 到 2 1 4 7 4 8 3 6 4 7 ,无符号 INT 从 0 到 4 2 9 4 9 6 7 2 9 5 这个范围限制非常明显。

我以前在做项目时遇到过这种情况:用户表使用有符号的 INT 来存储年龄。
这是正常的吗?但是有一个统计表应该存储设备总数。
直接使用有符号的 INT 是不够的。
必须使用无符号 INT。
如果当时不注意,插入了负数或者超出范围的数字,程序会直接崩溃,所以没什么大不了的。

主键自增功能非常实用。
我有一个电商项目要在2 02 2 年进行。
所有表的主键都是INT AUTO_INCRMENT。
创建表时,只需添加PRIMARY KEY AUTO_INCRMENT,插入数据不用管ID,系统会自行自增。
与使用 UUID 相比,这避免了很多问题!但是有一次我尝试插入一个现有的 ID,但以下自动增量忽略了该数字。
这个细节必须向团队解释清楚。

但请注意,从 MySQL 5 .1 开始,自动增量列只能存储正整数。
我有一个旧的 5 .0 项目。
当时我用负数自增,直接报错。
整夜运行脚本失败。
现在基本清楚了,但是新开发者有时还是会犯错误。

另外,INT的范围是有限的。
如果公司知道未来可能会超出范围(例如某个统计图表将在几年内爆炸),则应考虑 BIGINT。
我之前有一个项目。
当估计用户数为1 亿时,我选择使用BIGINT来存储ID,否则真的会出错。

设计表格时,不要只检查现在是否足够。
比如存储时间时,用INT存储秒就足够了,但可能会让后期维护人员感到困惑。
使用 DATETIME 或 TIMESTAMP 更直观。
使用 DECIMAL 来存储金钱。
它不一定是整数。
银行系统需要非常高的精度。

无论如何,这取决于你。
如果你运用得好,INT是一个神奇的工具。
如果你用得不好……就等着调试吧。

mysql中TINYINT的取

让我告诉你一件事。
2 008 年,当我第一次开始从事这个项目时,我在一家小公司工作,从事数据库工作的人告诉了我这一点,我完全困惑了。
后来我遇到了一个问题。
本来我觉得把年龄存储在user表的字段中比较合适,但是我朋友用的是TINYINT。
结果用户填写了年龄2 5 6 ,直接报错。
想一想,在那种场景下,用户还是一头雾水,觉得系统bug其实是他自己填的夸大其词。

无符号的,0到2 5 5 ,确实是8 位,全0都是0,全1 是2 5 5 有符号,1 2 8 到1 2 7 ,最高符号位,0正1 负,补码的东西,我后来发现,是-1 2 8 ,你弄清楚怎么得到,补码加1 我在帮别人调试的时候,看到日志中的-1 2 8 ,感觉很奇怪。
后来我发现有人填写了2 5 6 ,数据库自动将其转换为-1 2 8
所以,用TINYINT来节省年龄确实是不可能的。
至少你得用SMALLINT,无符号0到6 5 5 3 5 ,有符号-3 2 7 6 8 到3 2 7 6 7 ,就够了。
不要犯我犯过的同样的错误。
用户填写年龄,系统返回一个负数给你。
多么尴尬啊。