当前位置:   article > 正文

MySQL中的unsigned和zerofill_mysql unsigned zerofill

mysql unsigned zerofill

unsigned

其意思为无符号的意思,在创建表中,字段添加此项可以令字段只能保存正数,并且可以增大数据类型的可用范围。

创建一个表,用于测试

mysql> create table test(num1 int,num2 int unsigned);
  • 1

在其中一个字段中添加unsigned,往里面插入数据时,就会发现区别了。

往两个字段中添加负数,测试结果

mysql> insert into test values(-222,-233);
ERROR 1264 (22003): Out of range value for column 'num2' at row 1
  • 1
  • 2

显示num2字段插入的数据超出范围,-233在int的范围之内,但因为添加了unsigned字段,使num2字段不能为负数。

换成整数,插入查看

mysql> insert into test values(-222,233);
Query OK, 1 row affected (0.00 sec)

mysql> select * from test;
+------+------+
| num1 | num2 |
+------+------+
| -222 |  233 |
+------+------+
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

这样数据就出入成功了,查看一下结构

mysql> desc test;
+-------+------------------+------+-----+---------+-------+
| Field | Type             | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| num1  | int(11)          | YES  |     | NULL    |       |
| num2  | int(10) unsigned | YES  |     | NULL    |       |
+-------+------------------+------+-----+---------+-------+
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

unsigned常用于一些数据不能为负数的场合。

增大数据类型的可用范围

我们在查看数值类型的可用范围时,通常都会有一个无符号范围,这个无符号范围就是在数值类型中添加了unsigned。假如:一个数值类型的可用范围为-10~10,那么他的无符号范围就是0~20,你可以理解为数值类型加上unsigned,可以使数值类型的正数范围翻倍。

就拿tinyint来说,其范围是(-128,127),创建一组tinyint类型的表,用于比较

mysql> create table test233(num1 tinyint,num2 tinyint unsigned);
  • 1

统一添加超过范围的记录

mysql> insert into test233 values (233,233);
ERROR 1264 (22003): Out of range value for column 'num1' at row 1
  • 1
  • 2

正常报错,插入的数值超过范围,将num1的数值减小

mysql> insert into test233 values (23,233);
  • 1

233按道理来说超过了tinyint范围,但没有显示任何报错,之后查询表的记录

mysql> select *from test233;
+------+------+
| num1 | num2 |
+------+------+
|   23 |  233 |
+------+------+
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这样就插入成功了,也正是unsigned的范围增大功能。

虽然增大了可用范围,但类型大小并没有改变,可适当的减少数据类型占用的存储空间,tinyint型常用于员工人数和年龄。

zerofill

zerofill的作用是填充0,在字段中数据类型规定的范围中,若是插入的数据不满足范围,则会使用空格作为填充,使其符合要求,而zerofill则会将空格改为0。

创建一个表,用于测试

mysql> create table test2(num1 int(5),num2 int(5) zerofill);
  • 1

规定num1和num2的数值宽度为5,若是插入的数值不足5位,则num1使用空格填充,num2使用0填充。

插入数据并查看

mysql> insert into test2 values(1,1);
Query OK, 1 row affected (0.01 sec)

mysql> select * from test2;
+------+-------+
| num1 | num2  |
+------+-------+
|    1 | 00001 |
+------+-------+
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

查看结构

mysql> desc test2;
+-------+--------------------------+------+-----+---------+-------+
| Field | Type                     | Null | Key | Default | Extra |
+-------+--------------------------+------+-----+---------+-------+
| num1  | int(5)                   | YES  |     | NULL    |       |
| num2  | int(5) unsigned zerofill | YES  |     | NULL    |       |
+-------+--------------------------+------+-----+---------+-------+
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

定义填充符为0后,默认就会将unsigned项添加进去,因为以0开头的,不可能是负数(负数是以-开头的)。

对于数据类型后的()不清楚可以转到===>一键飞行<===查看。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/322331
推荐阅读
相关标签
  

闽ICP备14008679号