vachar的长度到底是字符还是字节
首先介绍一下字符和字节的定义
- 字符 人们使用的记号,抽象意义上的一个符号。一个汉字,一个英文,一个数字就是一个字符,如'1', '中', 'a', '$', '¥',……
- 字节 计算机中存储数据的单元,1个byte为一个字节,1个byte包含8个bit,也就是8个二进制位,0-9和a-z分别在ascii码中代表一个字节,utf8的中文汉字,一个字符占用3个字节。
我们定义一个name字段varchar类型,长度为2。
可以看到不管是数字,字母,还是中文,最多俩个字符。
而mysql中的函数Length()计算的确实字节长度,可以看出一个Utf8的中文字符占3个字节
int的长度指的是什么
提前告知:int的长度并不是指int值的最大长度,整形值的最大长度由它的类型决定,tinyint,smallint,mediumint,int和bigint,不同类型的整形范围如下。
那么int(11),这个11指的是什么呢?
11 代表的并不是长度,而是字符的显示宽度,这个宽度并不会限制int值的最小值和最大值,影响值得范围的是值得类型,如上图。
当 int 字段类型设置为无符号且填充零(UNSIGNED ZEROFILL)时,当数值位数未达到设置的显示宽度时,会在数值前面补充零直到满足设定的显示宽度。
为什么会有无符号的限制呢,是因为 ZEROFILL 属性会隐式地将数值转为无符号型,因为填充的是0,最前位是0表示的就是正数。
网友评论