mysql中数值类型的理解
因为比较纠结于mysql中整形数据如何存储和能存多大的数据,我特地用我那不甚聪明的脑袋理解了一下,读了一些资料下边知识点一点点缕清.
1.各种整数类型能存储多大的数据,这些数据是如何理解的
类型 |
字节 |
最小值 |
最大值 |
|
|
(带符号的/无符号的) |
(带符号的/无符号的) |
TINYINT |
1 |
-128 |
127 |
|
|
0 |
255 |
SMALLINT |
2 |
-32768 |
32767 |
|
|
0 |
65535 |
MEDIUMINT |
3 |
-8388608 |
8388607 |
|
|
0 |
16777215 |
INT |
4 |
-2147483648 |
2147483647 |
|
|
0 |
4294967295 |
BIGINT |
8 |
-9223372036854775808 |
9223372036854775807 |
|
|
0 |
18446744073709551615 |
上边这个表,摘自中文版mysql 5.1 手册.第二列字节代表字节长度,而不是我们建立sql语句是的int(2)中2的意思.
整数类型能够存储多大的数据跟字节位数有关系.我们知道 1BYTE = 8bit,这里的 bit就是计算机中位的概念,对于计算机而言,二进制是存储的根本,
8bit表示的二进制形式最大的正整数是 1111 1111,最大的负整数是 1000 0000
因为我们在选择建立数据的时候就规定的了字符是有符号的或者无符号的,如果是无符号的数据,结果就会被认为存储的数据为正整数,所以范围就是(0000 0000 - 1111 1111),在十进制中就表示了(0 - 256),如果我们选择是有符号的,则二进制第一位用来存储符号,第一位是1则表示复数,第一位是0则表示存储的是正整数.所以范围就是(1000 0000 - 0111 111),十进制中就是 (-128 - 127),如果数值范围不好记,我们可以记住是 256 的 次方.如果是tinyint,最大值就是 2561 - 1,Bigint 就是 2568 - 1
2.我刚刚看ecshop的表格的时候,有个表格的长度表明了 mediumint(9),我想不论是长度或者是字节数都不可能是9这个数值,于是就出来这篇文章了.
在手册中有这样一句话"MySQL还支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。",所以这里的数值4显示的是显示宽度,而不是实际存储的长度,更不是字节数,而且是仅仅对于限定 unsigned zerofill 起作用,如果你的数据表中没有 unsigned zerofill 限定符,就不要在数据表中添加上对显示宽度进行限定的字串.除非你的tinyint仅仅默认存储一位,这个是可以使用的
我用导航猫建立了一个测试数据表
CREATE TABLE `mediumint6` (
`id` int(9) unsigned zerofill default NULL,
`mediumint` mediumint(6) unsigned zerofill NOT NULL default '000000',
PRIMARY KEY (`mediumint`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
但是我存储进去两组数据,在导航猫中显示的却是
在phpmyadmin中显示的是
3.于是便出来这个问题,使用zerofill能否使用 id = ? 进行查询,
在phpMyadmin和导航猫中都有正确表现,zerofill不影响正常的查询.
4.PHP中和数据库客户端中对于数据是如何呈现的.
数据库客户端我现在没有检测,我用的是集成的环境,在PHP中,使用ez_sql库是这样呈现的
没有疑问了,有疑问的跟帖.绝对原创,欢迎拍砖.