MySQL(三)--类型属性

来源:互联网 发布:想在淘宝网上卖东西 编辑:程序博客网 时间:2024/06/05 17:19

一.UNSIGNED

    UNSIGNED属性就是将数字类型无符号化,与C、C++这些程序语言中的unsigned含义相同。例如,INT的类型范围是-2 147 483 648 ~ 2 147 483 647, INT UNSIGNED的范围类型就是0 ~ 4 294 967 295。

    看起来这是一个不错的属性选项,特别是对于主键是自增长的类型,因为一般来说,用户都希望主键是非负数。然而在实际使用中,UNSIGNED可能会带来一些负面的影响。

    先创建一张表t:

CREATE TABLE t(       a INT UNSIGNED,       b INT UNSIGNED)ENGINE = INNODB;

    再插入一条数据:

INSERT INTO t SELECT 1,2;

    查找:

SELECT a - b FROM t

    结果报错了,截图如下:


    解释:

    a-b的十六进制结果是0xFFFFFFFF,只是0xFFFFFFFF可以代表两种值:

    对于无符号的整型值,其是整型数的最大值,即4 294967 295;

    对于有符号的整型数来说,第一位代表符号位,如果是1,表示是负数,这时应该是取反加1得到负数值,即-1。

    所以这条语句在MySQL中运行,可能会得出-1,或是一个很大的整数,或者报错。

二.ZEROFILL

    先看一下t的建表语句:


    整形是4字节的,int(10)代表的是什么?其实int(M)中的M值只是指定显示长度,并不表示存储长度。

    对表修改一下:

    ALTER TABLE t CHANGE COLUMN a a INT(4) UNSIGNED ZEROFILL;

    查询看一下:


    这就是ZEROFILL属性的作用,如果宽度小于设定的宽度,则自动填充0,其实在数据库内部存储的还是1,0001只是设置了ZEROFILL属性后的一种格式化输出。

 

原创粉丝点击