mysql int 类型总结

(1)位是计算机中数据的最小单位。计算机采用二进制表示和存储数据,1位即1个二进制数0或者1;  
(2)字节也是属于数据的单位,与位的换算公式为1字节=8位;  
(3)地址是对内存空间进行编码的方法,当数据保存到内存后,可根据其地址编码快速找到存储的数据。
字符与字节 ASCII码 :一个英文字母(不分大小写)占一个字节的空间,一个中文 汉字 占两个字节的空间。一个 二进制数 字序列,在 计算机 中作为一个数字单元,一般为8位二进制数,换算为 十进制 。最小值0,最大值255。如一个ASCII码就是一个字节。
UTF-8编码:一个英文 字符 等于一个字节,一个中文(含繁体)等于三个字节。
Unicode编码:一个英文等于两个字节,一个中文(含繁体)等于两个字节。 符号:英文 标点 占一个字节,中文标点占两个字节。举例:英文句号“.”占1个字节的大小,中文句号“。”占2个字节的大小)

int(M) zerofill,加上zerofill后M才表现出有点点效果,比如 int(3) zerofill,你插入到数据库里的是10,则实际插入为010,也就是在前面补充加了一个0.如果int(3)和int(10)不加zerofill,则它们没有什么区别.M不是用来限制int个数的.int(M)的最大值和最小值与undesigned有关,
mysql> create table t (t int(3) zerofill);
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t set t = 10;
Query OK, 1 row affected (0.00 sec)

mysql> select * from t;
+——+
| t |
+——+
| 010 |
+——+
1 row in set (0.11 sec)

Zerofill with default width, the same as int(10):

mysql> create table t (t int zerofill);
Query OK, 0 rows affected (0.02 sec)

mysql> insert into t set t = 10;
Query OK, 1 row affected (0.02 sec)

mysql> select * from t;
+————+
| t |
+————+
| 0000000010 |
+————+
1 row in set (0.08 sec)

Without zerofill:

mysql> create table t (t int);
Query OK, 0 rows affected (0.01 sec)

mysql> insert into t set t = 10;
Query OK, 1 row affected (0.01 sec)

mysql> select * from t;
+——+
| t |
+——+
| 10 |
+——+
1 row in set (0.00 sec) 


1 bytes = 8 bit ,一个字节最多可以代表的数据长度是2的8次方 11111111 在计算机中也就是
-128到127
1.BIT[M]
位字段类型,M表示每个值的位数,范围从1到64,如果M被忽略,默认为1
2.TINYINT[( M )] [UNSIGNED] [ZEROFILL] 
 M默认为4很小的整数。带符号的范围是-128到127。无符号的范围是0到255
3. BOOL,BOOLEAN
是TINYINT(1)的同义词。zero值被视为假。非zero值视为真。
4.SMALLINT[( M )] [UNSIGNED] [ZEROFILL]
M默认为6小的整数。带符号的范围是-32768到32767。无符号的范围是0到65535。
5.MEDIUMINT[( M )] [UNSIGNED] [ZEROFILL]
M默认为9中等大小的整数。带符号的范围是-8388608到8388607。无符号的范围是0到16777215。
6. INT[( M )] [UNSIGNED] [ZEROFILL]  
 M默认为11普通大小的整数。带符号的范围是-2147483648到2147483647。无符号的范围是0到4294967295。
7.BIGINT[( M )] [UNSIGNED] [ZEROFILL]
M默认为20大整数。带符号的范围是-9223372036854775808到9223372036854775807。无符号的范围是0到18446744073709551615。
注意:这里的M代表的并不是存储在数据库中的具体的长度,以前总是会误以为int(3)只能存储3个长度的数字,int(11)就会存储11个长度的数字,这是大错特错的。 的整数。带符号的范围是-128到127。无符号的范围是0到255。

mysql数据库中以 :数据类型(m)  来约束数据,其中 数字m在不同的数据类型中表示含义是不同的。 咱们这里只讲整数。
整型数系统已经限制了取值范围,tinyint占1个字节、int占4个字节。所以整型数后面的 m不是表示的数据长度 ,而是表示数据在显示时 显示的最小长度
tinyint(1) 这里的1表示的是 最短显示一个字符。tinyint(2) 这里的2表示的是 最短显示两个字符。
当字符长度超过(m)时,相当于啥都没发生;
当字符长度小于(m)时,就需要指定拿某个字符来填充,比如zerofill(表示用0填充),
设置tinyint(2) zerofill 你插入1时他会显示01;设置tinyint(4) zerofill 你插入1时他会显示0001。
所以, 没有zerofill,(m)就是无用的
综上整型的数据类型括号内的数字不管是多少,所占的存储空间都固定的。
mysql 中int(1)和tinyint(1)中的1只是指定显示长度,并不表示存储长度, 只有字段指定zerofill时有用 位数限制基本没有意义。
总结:int(11),tinyint(1),bigint(20),后面的数字,不代表占用空间容量。而代表最小显示位数。这个东西基本没有意义,除非你对字段指定zerofill。
所以我们在设计mysql数据库时,
建表时,mysql会自动分配长度:int(11)、tinyint(4)、smallint(6)、mediumint(9)、bigint(20)。
所以,就用这些默认的显示长度就可以了。不用再去自己填长度,比如搞个int(10)、tinyint(1)之类的,基本没用。而且导致表的字段类型多样化。
建一个float类型的字段时,故意建成float(2,3)型,是错误的。报错如下。

第一个数字M,代表总长度限制(总长度包括小数位和整数位),2代表总长度不能超过2个字符,比如2.34,就超过了2位总长度;
第二个数字D,代表小数位的长度限制。0.2表示占用了1个小数位。
这样看,当然M必需大于等于D。
比如设置为float(2,2),那么写入12.3这个数字时,实际插入的是0.99。
比如设置为float(2,1),那么写入12.3这个数字时,实际插入的是9.9。
mysql会自动截取该字段能接受的最大值存入。
那么设置为float(0,0),则相当于不受限制,或者说受float 本身的精度限


注意;
1,在int类型的数进行零填充的时不要忘了int( - )中的数,若不写则默认11.

猜你喜欢

转载自blog.csdn.net/lsy_666/article/details/79185055