使用sql中 int(11)存储手机号错误!!!!
这些类型,是定长的,其容量是不会随着后面的数字而变化的,其值的范围是确定的。
比如int(11)和int(8),都是一样的占4字节。tinyint(1)和tinyint(10)也都占用一个字节。
那么后面的11和8,有啥作用呢?
数据类型(m)中的m不是表示的数据长度,而是表示数据在显示时显示的最小长度。tinyint(1) 这里的1表示的是 最短显示一个字符。tinyint(2) 这里的2表示的是 最短显示两个字符。
手机号的本质是字符串而不是数字,只是恰巧长得像数字而已。
char(32):(char的长度可选范围在0-255字符之间。也就是char最大能存储255个字符.)
占用空间 | 固定 32 字符(如果数据长度不够 32 将在右边用空格补齐,以达到指定的长度) |
空格处理 | 检索时会去掉尾部空格(数据本身有空白符也会被去掉) |
是否记录字段长度 | 否 |
适用场景 | 存储的数据长度基本一致,不需要空格,eg 手机号、UUID、密码加密后的密文 |
varchar(32):在mysql5.0.3之前varchar的长度范围为0-255字符,mysql5.0.3之后varchar的长度范围为0-65535个字符.
占用空间 | 跟随实际存储内容长度,但不超过 32 |
空格处理 | 不会对空格处理 |
是否记录字段长度 | 是。额外拿出空间记录字段数据长度(字符数) |
适用场景 | 数据长度不一定,长度范围变化较大的场景 |
参考自:mysql存储手机号为什么不用bigint?_韩旭051的博客-CSDN博客
mysql中的varchar(10)和 int(11)是什么意思?_高高的博客-CSDN博客