我是靠谱客的博主 害怕钢铁侠,最近开发中收集的这篇文章主要介绍MySQL中的unsigned和zerofill,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

unsigned

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

创建一个表,用于测试

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

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

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

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

显示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 |
+------+------+

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

mysql> desc test;
+-------+------------------+------+-----+---------+-------+
| Field | Type             | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| num1  | int(11)          | YES  |     | NULL    |       |
| num2  | int(10) unsigned | YES  |     | NULL    |       |
+-------+------------------+------+-----+---------+-------+

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

增大数据类型的可用范围

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

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

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

统一添加超过范围的记录

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

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

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

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

mysql> select *from test233;
+------+------+
| num1 | num2 |
+------+------+
|   23 |  233 |
+------+------+

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

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

zerofill

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

创建一个表,用于测试

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

规定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 |
+------+-------+

查看结构

mysql> desc test2;
+-------+--------------------------+------+-----+---------+-------+
| Field | Type                     | Null | Key | Default | Extra |
+-------+--------------------------+------+-----+---------+-------+
| num1  | int(5)                   | YES  |     | NULL    |       |
| num2  | int(5) unsigned zerofill | YES  |     | NULL    |       |
+-------+--------------------------+------+-----+---------+-------+

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

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

最后

以上就是害怕钢铁侠为你收集整理的MySQL中的unsigned和zerofill的全部内容,希望文章能够帮你解决MySQL中的unsigned和zerofill所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(30)

评论列表共有 0 条评论

立即
投稿
返回
顶部