MySQL中UNSIGNED和ZEROFILL的介绍
UNSIGNED:
将数字类型无符号化,这与C和C++这些程序语言的unsigned含义相同。
INT的类型范围-2 147 483 648~2 147 483 647
INT UNSIGNED范围0~4 294 967 295
看起来是个不错的属性选项,特别是对于主键自增长的类型,因为一般来说,用户都希望主键是非负数,然而,在实际使用中,UNSIGNED可能会带来一些负面的影响。
示例
CREATE TABLE t(a INT UNSIGNED,b INT UNSIGNED); INSERT INTO t SELECT 1,2; SELECT * FROM t; a b ------ -------- 1 2
我们创建了一个表t,存储引擎为InnoDB,表t 上有两个UNSIGNED的INT类型,输入(1,2)这一行的数据,目前看来是没有问题的,运行如下语句
SELECT a-b FROM t;
会报错
BIGINT UNSIGNED value is out of range in '(`iot2`.`t`.`a` - `iot2`.`t`.`b`)'
要怎么才能获得-1这个数呢,只需要将SQL_MODE这个参数进行设置即可
SET sql_mode='NO_UNSIGNED_SUBTRACTION'; SELECT a-b FROM t; a-b -------- -1
个人看法是尽量不要使用UNSIGNED,因为可能会带来一些意想不到的的效果,对于INT类型可能存放不了的数据,INT UNSIGNED同样可能存放不了,与其如此,还不如在数据库设计阶段将INT类型提升为BIGINT类型
ZEROFILL:
通过t表来表述
Table Create Table ------ ---------------------------------------------------------------------------------------------------------------------------------- t CREATE TABLE `t` ( `a` int(10) unsigned DEFAULT NULL, `b` int(10) unsigned DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8
可以看到int(10),如果没有ZEROFILL这个属性,括号内int(10)这个10的数字是毫无意义
但是对列添加ZEROFILL属性后,结果就有所不同
ALTER TABLE t CHANGE COLUMN a a INT(4) UNSIGNED ZEROFILL;
这里对a列进行了修改,为其添加了ZEROFILL属性,并且将默认的int(10)改成int(4),在进行查找,返回的结果是
a b ------ -------- 0001 2
这是可以看到a的值由原来的1变为0001,这就是ZEROFILL属性的作用,如果宽度小于设定的宽度(这里宽度为4),则自动填充0,需要注意的是,这只是最后显示的结果,在MySQL中实际存储的还是1
SELECT a,HEX(a) FROM t; a hex(a) ------ -------- 0001 1
可以看到数据库内部存储还是1,0001只是设置了ZEROFILL属性的一种格式化输出而已。
MySQL中UNSIGNED和ZEROFILL的介绍的更多相关文章
- Vusual C++连接Mysql和从MySql中取出数据的API介绍
.1 mysql_real_connect() 2.1.1 函数原型: MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const ...
- mysql 中unsigned
整型的每一种都分有无符号(unsigned)和有符号(signed)两种类型(float和double总是带符号的),在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类 ...
- MySQL 的两个特殊属性 unsigned与 zerofill
1 unsigned unsigned 就是将数字类型无符号化, 例如 int 型的范围:-2^31 ~ 2^31 - 1,而unsigned int的范围:0 ~ 2^32.看起来unsigned ...
- binary(binary区分大小写),unsigned,unsigned zerofill关键字介绍
mysql建表时,每个字段的属性有三个选项: binary,unsigned,unsigned zerofill,作用如下: 一.binary CHAR VARCHAR:值根据缺省字符集以大小写不区分 ...
- MySQL 中的数据类型介绍(转)
据我统计,MySQL支持39种(按可使用的类型字段统计,即同义词也作多个)数据类型.下面的介绍可能在非常古老的mysql版本中不适用. 转载出处:http://blog.csdn.net/anxpp/ ...
- MYSQL中数据类型介绍
一.MySQL的数据类型 主要包括以下五大类: 主要包括以下五大类: 整数类型:bit. int . bit int . small int . tiny int . medium int .boo ...
- MySQL 中的数据类型介绍
1.MySQL 数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的. MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型. 2.数值类型(12) 2.1. ...
- mysql中模糊查询的四种用法介绍
下面介绍mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] ...
- mysql中set和enum使用(简单介绍)
简单介绍 SET类型 在创建表时,就指定SET类型的取值范围. 属性名 SET('值1','值2','值3'...,'值n') 其中,“属性名”参数指字段的名称:“值n”参数表示列表中的第n个值,这些 ...
随机推荐
- c++中的new和delete
对于计算机程序设计而言,变量和对象在内存中的分配都是编译器在编译程序时安排好的,这带来了极大的不便,如数组必须大开小用,指针必须指向一个已经存在的变量或对象.对于不能确定需要占用多少内存的情况,动态内 ...
- WebForm页面数据绑定总结
总述 绑定语法 第一种: <%= str%> 例子:'<%= DateTime.Now %>'适用条件:用于非服务器端控件的属性第二种: <%= str%> 从出现 ...
- spring boot 学习(四)Druid连接池的使用配置
Druid介绍 Druid是一个JDBC组件,druid 是阿里开源在 github 上面的数据库连接池,它包括三部分: * DruidDriver 代理Driver,能够提供基于Filter-Cha ...
- Python gui编程pyQt5安装步骤
Python gui编程pyQt5安装步骤 =============================== -m PyQt5.uic.pyuic $FileName$ -o $FileNameWit ...
- 对va_list; va_start ; va_end ;vsprintf理解(转)
以下为转载内容: int printf(const char* fmt, ...) { va_list args; int i; //1.将变参转化为字符串 va_start(args,fmt); v ...
- linux shard virtual memory
- Flash OS images to SD cards & USB drives & TF cards safely and easily using etcher
install tools: wget https://github.com/resin-io/etcher/releases/download/v1.4.5/etcher-cli-1.4.5-lin ...
- ansible with_subelements
with_subelements 循环列表中的子元素 (意想不到的地方会用到) --- - hosts: web tasks: - authorized_key: "user={{ item ...
- 2019.1.3 WLAN 802.11 a/b/g PHY Specification and EDVT Measurement II - Transmit Spectrum Mask & Current Consumption
Transmit Spectrum Mask Specification – 802.11b SpecificationFor 802.11b 18.4.7.3The transmitted spec ...
- kbmMW 5.06.20试用笔记
1.kbmMWConfiguration自动备份配置文件的问题还没有修正. 下面是以前写过的内容,再一次在新闻组中提出这个问题: kbmMW提供一个强大的配置信息管理对象,前期译过这个对象的介绍,在使 ...