数据类型,MySQL本领内幕

对数据类型的抉择将震慑与数据库交互的应用程序的特性。

对数据类型的挑3拣四将震慑与数据库交互的应用程序的性质。

《MySQL技能内幕——SQL编制程序》读书笔记(二)——数据类型,java编制程序思想读书笔记

对数据类型的选择将震慑与数据库交互的应用程序的本性。

1、平常来讲,假如1个页内能够存放尽大概多的行,那么数据库的性情就越好,因而选择贰个科学的数据类型至关心珍惜要。

二、另1方面,假使在数据库中开创表时采用了错误的数据类型,那么早先时期的掩护资金只怕越来越大,用户供给花大量时辰展开ALTER
TABLE 操作。

  1. 数据类型

  2. UNSIGNED

将数字类型无符号化。

例如:

INT 的项目范围是 -214748364八 ~ 2147483647

数据类型,MySQL本领内幕。INT UNSIGNED 的 类型范围是 0 ~ 42967295

看起来很不错的属性 ,但会有部分负面效应。

 

CREATE TABLE t (a INT UNSIGNED,b INT UNSIGNED);
INSERT INTO t SELECT 1,2;
SELECT a - b FROM t;

实践最后一条sql后会报错,若是没有报错获得的结果应该是四 2九4 玖陆七 295。

以致那种结果的由来是:

 

-1 的 1陆进制表示是:0xfff fff ff
四 2玖四 玖陆七 295 的1陆进制表示是 : 0xfff fff ff
在MySQL数据库中,对于UNSIGNED数的操作,其再次回到值都UNSIGNED的。

借使想要得到 – 一 这么些值,只要对SQL_MODE那一个参数进行安装就可以:

SET sql_mode='NO_UNSIGNED_SUBTRACTION';

 

尽心尽力不要选择UNSIGNED,INT 类型大概存放不了的数量,INT UNSIGNED
同样或者存放不了,与其如此,还比不上在数据库设计阶段将INT类型升高为BIGINT类型。

 

2、ZEROFILL

像是一人作品体现的属性。

 

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

修改了a列后,寻找t表的数量,会出现差异样的来得:

 

SELECT a,b FROM t\G;
a: 0001
b:2

 

能够看来a的值由原来的1 变为
000一,那正是ZEROFILL属性的魔法,若是幅度小于设定的上升的幅度,则自动填写 0。

注意:

 

在MySQL中实际存款和储蓄的依然壹。能够用HEX函数检查:

SELECT a,HEX(a) FROM t\G; 

 

在有些窗口也许看不到,mysql命令行能够见见。

对数据类型的选项将影响与数据库交互的应用程序的天性。…

UNSIGNED:

1、平常来讲,借使三个页内能够存放尽大概多的行,那么数据库的习性就越好,因而挑选七个正确的数据类型至关心重视要。

1、常常来说,如若一个页内能够存放尽大概多的行,那么数据库的天性就越好,因而挑选二个没有错的数据类型至关心注重要。

将数字类型无符号化,那与C和C++那么些程序语言的unsigned含义一样。

2、另一方面,假使在数据库中开创表时甄选了错误的数据类型,那么前期的掩护资金只怕尤其大,用户需求花多量时日张开ALTER
TABLE 操作。

2、另一方面,假若在数据库中成立表时增选了错误的数据类型,那么前期的保卫安全资金财产或然非常大,用户须求花多量时刻开始展览ALTER
TABLE 操作。

INT的门类范围-二 147 4捌三 64八~2 147 483 647

  1. 数据类型

  2. UNSIGNED

  1. 数据类型

  2. UNSIGNED

INT UNSIGNED范围0~4 294 967 295

将数字类型无符号化。

将数字类型无符号化。

看起来是个不利的品质选项,尤其是对于主键自增加的品种,因为1般的话,用户都盼望主键是非负数,但是,在实际上利用中,UNSIGNED大概会带来一些负面包车型客车影响。

例如:

例如:

示例

INT 的类型范围是 -214748364八 ~
2147483647

INT 的项目范围是 -2147483648 ~
2147483647

CREATE TABLE t(a INT UNSIGNED,b INT UNSIGNED);

INSERT INTO t SELECT 1,2;

SELECT * FROM t;

     a       b 

------  --------

     1         2

INT UNSIGNED 的 类型范围是 0 ~
42967295

INT UNSIGNED 的 类型范围是 0 ~
42967295

咱俩创立了八个表t,存款和储蓄引擎为InnoDB,表t
上有七个UNSIGNED的INT类型,输入(一,二)那一行的数量,近年来总的来讲是一直不难题的,运行如下语句

看起来很科学的属性
,但会有一部分负面效应。

看起来很不错的属性
,但会有局地负面效应。

SELECT a-b FROM t;

 

 

 

CREATE TABLE t (a INT UNSIGNED,b INT UNSIGNED);
INSERT INTO t SELECT 1,2;
SELECT a - b FROM t;
CREATE TABLE t (a INT UNSIGNED,b INT UNSIGNED);
INSERT INTO t SELECT 1,2;
SELECT a - b FROM t;

会报错

奉行最终一条sql后会报错,假若未有报错得到的结果应该是4 2玖④ 967
2玖伍。

施行最终一条sql后会报错,若是未有报错获得的结果应当是4 2九肆 967
2玖伍。

BIGINT UNSIGNED value is out of range in '(`iot2`.`t`.`a` - `iot2`.`t`.`b`)'

致使那种结果的缘故是:

导致那种结果的原委是:

  

 

 

要怎么能力收获-一以此数呢,只供给将SQL_MODE这几个参数进行安装即可

-一 的 1陆进制表示是:0xfff fff ff
四 2玖4 玖六7 295 的16进制表示是 : 0xfff fff
ff
在MySQL数据库中,对于UNSIGNED数的操作,其重回值都UNSIGNED的。

-一 的 16进制表示是:0xfff fff ff
四 29四 九陆柒 2九伍 的1六进制表示是 : 0xfff fff
ff
在MySQL数据库中,对于UNSIGNED数的操作,其再次来到值都UNSIGNED的。

SET sql_mode='NO_UNSIGNED_SUBTRACTION';

SELECT a-b FROM t;

   a-b 

--------

      -1

即便想要获得 – 1这么些值,只要对SQL_MODE这一个参数实行设置就能够:

比方想要得到 – 1那一个值,只要对SQL_MODE这么些参数进行安装就可以:

村办见解是拼命三郎不要采取UNSIGNED,因为可能会带来一些想不到的的功能,对于INT类型大概存放不了的多少,INT
UNSIGNED同样也许存放不了,与其如此,还不及在数据库设计阶段将INT类型升高为BIGINT类型

SET sql_mode='NO_UNSIGNED_SUBTRACTION';
SET sql_mode='NO_UNSIGNED_SUBTRACTION';

ZEROFILL:

 

 

由此t表来发挥

尽心尽力不要采纳UNSIGNED,INT
类型或然存放不了的数据,INT UNSIGNED
一样大概存放不了,与其那样,还比不上在数据库设计阶段将INT类型进步为BIGINT类型。

尽心尽力不要接纳UNSIGNED,INT
类型大概存放不了的多寡,INT UNSIGNED
同样大概存放不了,与其那样,还不及在数据库设计阶段将INT类型提高为BIGINT类型。

Table   Create Table                                                                                                                      

------  ----------------------------------------------------------------------------------------------------------------------------------

t       CREATE TABLE `t` (                                                                                                                

          `a` int(10) unsigned DEFAULT NULL,                                                                                             

          `b` int(10) unsigned DEFAULT NULL                                                                                               

        ) ENGINE=InnoDB DEFAULT CHARSET=utf8      

 

 

  

2、ZEROFILL

2、ZEROFILL

                                       
                                               

像是一个来得的性子。

像是三个出示的质量。

能够观望int(十),假诺未有ZEROFILL那性情情,括号内int(10)那些拾的数字是毫无意义

 

 

然则对列加多ZEROFILL属性后,结果就南辕北辙

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

修改了a列后,寻找t表的数量,会现出不一样样的来得:

修改了a列后,寻找t表的多少,会产出差异等的来得:

 

 

 

此地对a列实行了更动,为其增加了ZEROFILL属性,并且将暗中同意的int(10)改成int(四),在拓展检索,重返的结果是

SELECT a,b FROM t\G;
a: 0001
b:2
SELECT a,b FROM t\G;
a: 0001
b:2
     a       b 

------  --------

  0001         2

 

997755.com澳门葡京, 

那是能够见到a的值由原来的1变为000壹,那正是ZEROFILL属性的成效,若是幅度小于设定的升幅(那里宽度为四),则自动填充0,供给专注的是,那只是终极展现的结果,在MySQL中实际上存款和储蓄的照旧壹

能够看出a的值由原来的一 变为
0001,那就是ZEROFILL属性的效果,假如幅度小于设定的大幅,则自动填写
0。

能够见到a的值由原来的一 变为
000壹,那正是ZEROFILL属性的机能,假设上涨的幅度小于设定的宽度,则自动填写
0。

SELECT a,HEX(a) FROM t;

     a  hex(a) 

------  --------

  0001  1      

注意:

注意:

能够观察数据库内部存款和储蓄依然壹,0001头是设置了ZEROFILL属性的一种格式化输出而已。

 

 

 

在MySQL中实际存款和储蓄的照旧1。能够用HEX函数检查:

在MySQL中实际存款和储蓄的照旧一。可以用HEX函数检查:

SELECT a,HEX(a) FROM t\G; 
SELECT a,HEX(a) FROM t\G; 

 

 

在1部分窗口或许看不到,mysql命令行能够看来。

在有些窗口也许看不到,mysql命令行能够阅览。

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website