MySQL 的两个特殊属性 unsigned与 zerofill
1 unsigned
unsigned 就是将数字类型无符号化, 例如 int 型的范围:-2^31 ~ 2^31 - 1,而unsigned int的范围:0 ~ 2^32。看起来unsigned 是个不错的类型,尤其是用在自增或者没有负数的情况。但是在实际使用中会出现一些意外的情况。
如上图,我们新建了一个测试表,两个字段均为unsigned int型,插入两个值,然后做减法运算时报错,并不是我们想要的结果,正常情况 1-2=-1,但是当数据类型为unsigned时,MySQL 运算的结果也是unsigned,而 -1 已经超出了unsigned 范围,所以会报错。
如何解决这个问题呢,设置一下sql_mode就可以解决这个问题
set sql_mode = 'NO_UNSIGNED_SUBTRACTION';
sql_mode 的设置是有风险的,因为可以通过这个设置允许一些非法的操作。如将 null 值插入not null字段,将非法的日期2017-12-32插入到日期字段。一般在生产环境都都设置为严格模式。所以在不熟悉MySQL底层机制或者不了解 unsigned 原理时,慎用它。
2 zerofill
zerofill 类似一个显示属性,首先来看看MySQL数据库中数字类型后面的长度是什么意思呢,使用show create table 命令来看表的建表语句。
可以看到 int(10) ,这代表什么意思呢?整型不就是4个字节,这个10代表什么意思,如果没有zerofill这属性,括号类的数字没有意义。
我们先来查询一下表的数据
然后我们修改列,对其添加zerofill属性
alter table t_test1 change column a a int(4) unsigned zerofill;
再来查看表的数据
a 字段前面增加了3个0,这是为什么,因为zerofill属性起作用了,当插入mysql中该字段的值的长度小于定义的长度时,会在数值前面补全相应数据的0。
MySQL 的两个特殊属性 unsigned与 zerofill的更多相关文章
- MySQL类型属性Unsigned与ZeroFill
1. Unsigned 就是将数字类型无符号化. int的类型范围是-2147483648~2147483647, int unsigned的类型范围是0~4294967295 Unsigned也可能 ...
- mysql的两阶段协议(封锁定理,虫洞事务)
我们都知道数据库的事务具有ACID的四个属性:原子性,一致性,隔离性和持久性.然后在多线程操作的情况下,如果不能保证事务的隔离性,就会造成数据的修改丢失(事务2覆盖了事务1的修改结果).读到脏数据(事 ...
- mysql 有两种数据库引擎发音
mysql 有两种数据库引擎 一种是 MyISAM,一种是 InnoDB MyISAM 发音为 "my-z[ei]m"; InnoDB 发音为 "in-no-db&quo ...
- strus2中获取表单数据 两种方式 属性驱动 和模型驱动
strus2中获取表单数据 两种方式 属性驱动 和模型驱动 属性驱动 /** * 当前请求的action在栈顶,ss是栈顶的元素,所以可以利用setValue方法赋值 * 如果一个属性在对象栈,在页面 ...
- flask 操作mysql的两种方式-sqlalchemy操作
flask 操作mysql的两种方式-sqlalchemy操作 二.ORM sqlalchemy操作 #coding=utf-8 # model.py from app import db class ...
- flask 操作mysql的两种方式-sql操作
flask 操作mysql的两种方式-sql操作 一.用常规的sql语句操作 # coding=utf-8 # model.py import MySQLdb def get_conn(): conn ...
- MYSQL中文乱码以及character_set_database属性修改
新安装MYSQL,还没有修改数据库系统编码. 之后由于创建数据库时候:create database db_name; 没有指定编码,之后发现乱码就修改各个属性之后还是乱码,便开始配置数据库属性,之后 ...
- MySql获取两个日期间的时间差
[1]MySql 语言获取两个日期间的时间差 DATEDIFF 函数可以获得两个日期之间的时间差.但是,这个函数得出的结果是天数. 需要直接获取秒数可使用TIMESTAMPDIFF函数.应用示例如下: ...
- (转)DataRow的各种状态和DataView的两种过滤属性
DataRow的各种状态 http://www.cnblogs.com/zxjyuan/archive/2008/08/20/1271987.html 一个DataRow对象刚被创建之后(DataTa ...
随机推荐
- JDBC复习1
1.什么是JDBC JDBC是java数据库连接技术的简称(Java DataBase Connectivity) jdbc是接口,jdbc驱动才是接口的实现,负责连接各种不同的数据库.jdbc的AP ...
- 【PS技巧】如何校正倾斜的图片
1.打开PS,直接拖拽图片. 2.点击[滤镜==>扭曲==>镜头校正],出现校正对话框. 3.点击拉直工具,从右向左滑一条直线. 参考文档: 在Photoshop中如何校正倾斜的图片?
- mysql 数据库基础命令
数据库命令: 进入 mysql 库; use mysql; 查看用户权限 select * from user where user='root' \G; 创建数据库 create database ...
- linux学习笔记整理(四)
第五章 Vim编辑器和恢复ext4下误删除的文件-Xmanager工具本节所讲内容:5.1 vim的使用5.2 实战:恢复ext4文件系统下误删除的文件5.3 实战:使用xmanager等远程连接工具 ...
- 复习centos7命令---vim常用
1.如果想向下移动5行:在一般模式下按:5↓: 2.如果想想左右移动5行:在一般模式下按:5← 3.移动到一行的开头:一般模式下按:0 4.移动到一行的末尾:一般模式下按:$ 5.移动到屏幕中的第一行 ...
- P1145 约瑟夫 W(模拟)
暴力+模拟 #include<iostream> #include<cstring> using namespace std; int ans, k, k2; ]; bool ...
- Python框架学习之Flask中的数据库操作
数据库操作在web开发中扮演着一个很重要的角色,网站中很多重要的信息都需要保存到数据库中.如用户名.密码等等其他信息.Django框架是一个基于MVT思想的框架,也就是说他本身就已经封装了Model类 ...
- svn 锁的处理
svn 锁的处理: 问题: 1:当用户在work copy1 中把某个文件或者文件夹锁住后,删除了这个工作区,重新取下来work copy2,再操作该文件的时候就报错说,该文件已经被锁住,必须先解锁, ...
- Red Hat 7.2 RPM安装Mysql 5.7.12
安装Red Hat 7.2 开发包Java包全部安装 下载Mysql 5.7.12 wget http://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5 ...
- 小米路由器Mesh,信号有多牛?
导读 现如今随着居住面积的增加,以前可能住在一室一厅,如今二室一厅.三室一厅都有相对应的户型,有的小伙伴甚至住上了越层,这些户型对于路由器来说非常吃力的,毕竟单台路由器的覆盖范围有限.可能大多数人会在 ...