Mysql中数据类型括号中的数字代表的含义
我们平时⽤sql语句建数据库的时候,总是会写到int(11),varchar(200)。但是括号⾥⾯的值具体代表什么意思呢?我感觉我是’知其然⽽不知其所以然’。
javascript书籍百度网盘⾸先,我们创建⼀个数据表test:
mysql> CREATE TABLE test(
-> id1 int(1),
-> id2 tinyint(1)
->);
mysql语句分类此处的有符号和⽆符号怎么区别?
to enable给⼀个字段加上UNSIGNED属性,该字段类型就是带符号的,⽐如tinyint,带UNSIGNED属性,这个字段就可以存0~255的值,如果没有UNSIGNED属性,就只能存-128~127之间的值
上述表格中的数值类型都是定长的,也就是说,⽆论你存的数值是多少,多⼤或者多⼩,占⽤的字节⼤⼩都是固定的。例如,之前设置的int(1),虽然M值是1个字符,但是它所占⽤的空间⼤⼩永远都是4个字节的⼤⼩,换句话说就是,你可以存⼊有符号整型从-2 147 483 648到2 147 483 647包括这两个数的中间任何⼀个数。int(1)和int(11)占⽤的是4个字节,可以存⼊上述这些数,tinyint(1)和
tinyint(4)占⽤的是1个字节,可以存⼊从-128到127的数,这也是为什么之前的⼀次试验,int(1)插⼊128成功,⽽tinyint(1)插⼊128却提⽰超出长度。
那么,这个M值到底代表什么意思呢?
到这⾥,我们已经可以发现,M值即使设置为1,它也可以存⼊字符长度⼤于1的值,那么,如果存⼊的字符长度⼩于1会怎么样?我们来试⼀试:
先将id1的类型更改为int(2),然后插⼊数据id1=1:
mysql> ALTER TABLE test Modify id1 int(2);
mysql> INSERT INTO test(id1)values(1);//运⾏成功,说明值1已经插⼊到test表中
mysql> SELECT * FROM test;matlab求矩阵的逆
+------+
| id1 |
springer考古+------+
| 1 |
+------+
//接下来,我们再修改⼀下id1的填充数据类型zerofill(表⽰⽤0填充),这⾥先知道如何操作即可,我们再从结果得出结论:
京东店铺好评排行榜mysql> ALTER TABLE test MODIFY id1 int(2) zerofill;
mysql> SELECT * FROM test;
+------+
| id1 |
+------+
| 01 |
+------+
现在是不是有些清楚了。我们设置的M值是2,没有设置zerofill⽤0填充时,对于操作没有任何影响,⽽设置了zerofill后,我们可以清楚地看到值1字符数不⾜M值,左前位置补0。我们也可以将M值设置成别的⼤⼩进⾏多次测试,这⾥就不进⾏测试了。
需要强调的是,不同的数据类型中的M值意义是不⼀样的,我们这⾥仅讨论整型中的M值。
从上⾯我们可以得到如下的结论:
1、整数型的数值类型已经限制了取值范围,有符号整型和⽆符号整型都有,⽽M值并不代表可以存储的数值字符长度,它代表的是数据在显⽰时显⽰的最⼩长度;
2、当存储的字符长度超过M值时,没有任何的影响,只要不超过数值类型限制的范围;
3、当存储的字符长度⼩于M值时,只有在设置了zerofill⽤0来填充,才能够看到效果,换句话就是说,没有zerofill,M值就是⽆⽤的。
总结:int(11),tinyint(1),bigint(20),后⾯的数字,不代表占⽤空间容量。⽽代表最⼩显⽰位数。这个东西基本没有意义,除⾮你对字段指定zerofill。
所以我们在设计mysql数据库时,建表时,mysql会⾃动分配长度:int(11)、tinyint(4)、smallint(6)、mediumint(9)、bigint(20)。
所以,就⽤这些默认的显⽰长度就可以了。不⽤再去⾃⼰填长度,⽐如搞个int(10)、tinyint(1)之类的,基本没⽤。⽽且导致表的字段类型多样化。
字符和字节的概念。
字节(Byte)是⼀种计量单位,表⽰数据量多少,它是计算机信息技术⽤于计量存储容量的⼀种计量单位。
字符是指计算机中使⽤的⽂字和符号,⽐如1、2、3、A、B、C、~!·#¥%……—*()——+、,中,国等等。
字符和字节不存在绝对的关系,只是在不同的编码格式⾥,对应的⽐值不⼀样。⽐如:
1.UTF-8编码中,⼀个英⽂字符等于⼀个字节,⼀个中⽂(含繁体)字符等于三个字节。
2.Unicode编码中,⼀个英⽂等于两个字节,⼀个中⽂(含繁体)字符等于两个字节。
符号:英⽂标点占⼀个字节,中⽂标点占两个字节。举例:英⽂句号“.”占1个字节的⼤⼩,中⽂句号“。”占2个字节的⼤⼩。
3.UTF-16编码中,⼀个英⽂字母字符或⼀个汉字字符存储都需要2个字节(Unicode扩展区的⼀些汉字存储需要4个字节)。
4.UTF-32编码中,世界上任何字符的存储都需要4个字节。
所有你看见的单个字:a,啊,都叫字符。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论