《MySQL技术内幕:SQL编程》读书笔记 -- 数据类型
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了《MySQL技术内幕:SQL编程》读书笔记 -- 数据类型,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4544字,纯文字阅读大概需要7分钟。
内容图文
一、数据属性
1.1 UNSIGNED
UNSIGNED是将数字类型无符号化,例如:INT类型范围为 -2147483648 ~ 2147483647,INT UNSIGNED表示的范围为 0 ~ 4294967295。
注意:UNSIGNED会有以下问题:
mysql> create table test ( a int unsigned, b int unsigned);
Query OK, 0 rows affected (0.05 sec)
mysql> insert into test values(1, 2);
Query OK, 1 row affected (0.04 sec)
mysql> select a-b from test;
ERROR 1690 (22003): BIGINT UNSIGNED value is out of range in '(`test`.`test`.`a` - `test`.`test`.`b`)'
可以发现,a-b 并不是我们预想中的 -1,这是为什么呢,因为:-1 的 FFFFFFFF,而FFFFFFFF所代表的无符号数为:4294967295,有符号数为:首位为符号位,1表示负数,取反加1结果为-1;
所以这个值不一定,可能是-1,可能是很大的正值,在mac系统中会报上面的错误。
1.2 ZEROFILL
作用是用0填充空白位,请看下面例子:
mysql> create table test (a int(4) unsigned zerofill);
Query OK, 0 rows affected (0.06 sec)
mysql> insert into test values(1);
Query OK, 1 row affected (0.01 sec)
mysql> select * from test;
+------+
| a |
+------+
| 0001 |
+------+
1 row in set (0.00 sec)
二、日期和时间类型
MySQL有五种日期和时间相关的类型,具体占用空间情况如下:
类型 | 所占用空间 |
DATETIME | 8字节 |
DATE | 3字节 |
TIMESTAMP | 4字节 |
YEAR | 1字节 |
TIME | 3字节 |
DATETIME:
日期范围 1000-01-01 00:00:00 ~ 9999-12-23 23:59:59;
DATE:
日期范围 1000-01-01 ~ 9999-12-23;
TIMESTAMP:
日期范围 1970-01-01 00:00:00 ~ 2038-01-19 03:14:07;
YEAR:
可用DEFAULT CURRENT_TIMESTAMP 设初始值,用ON UPDATE CURRENT_TIMESTAMP自动更新修改时间;
可以指定宽度为YEAR(4)或YEAR(2),YEAR(4)对应的年份范围 1901 ~ 2155;YEAR(2)对应的年份范围 1970 ~ 2070,在YEAR(2)下,00~69表示 2000 ~ 2069年
TIME:
表示范围为 -838:59:59 ~ 838:59:59;
三、数字类型
3.1 整型
类型 | 占用空间(字节) | 最小值(signed/unsigned) | 最大值(signed/unsigned) |
TINYINT | 1 |
-128 0 |
127 255 |
SMALLINT | 2 |
-32768 0 |
32767 65535 |
MEDIUMINT | 3 |
-8388608 0 |
8388607 16777215 |
INT | 4 |
-2147483648 0 |
2147483648 4294967295 |
BIGINT | 8 |
-9223372036854775808 0 |
9223372036854775808 18446744073709551615 |
3.2 浮点型(非精确类型)
有 FLOAT 和 DOUBLE PRECISION,非精度类型不能保证计算的正确性,例如M*G/G不一定等于M。
3.3 高精度类型
有DECIMAL和NUMBER两种类型,最大位数为65位。
3.4 位类型
BIT(m)表示存储m位数值,m范围1~64,所占用空间 (m+7)/8字节,如果插入值位数小于m,左边补0;
四、字符类型
4.1 CHAR、VARCHAR
CHAR(N)用来保存固定长度的字符串,N的范围为 0 ~ 255 、VARCHAR(N)用来保存变长字符串,N的范围为 0 ~ 65535;其中N代表字符长度,而非字节长度。
CHAR(10)占位10位毫无疑问,但是VARCHAR(10)的最大占用空间为11位,因为需要1位来保存字符长度,当n > 255时,需要用2位的空间来保存字符长度。
4.3 BINARY、VARBINARY
BINARY、VARBINARY和CHAR、VARCHAR类型,不同的是,BINARY、VARBINARY存储的是二进制的字符串,另外不同的一点是做比较时,CHAR、VARCHAR会忽略填充字符,而BINARY、VARBINARY因为存储的填充字符的二进制数值,所以在做比较的时候结果会不同:
mysql> select hex(binary('a')), hex(binary('a ')), binary('a') = binary('a ');
+------------------+-------------------+----------------------------+
| hex(binary('a')) | hex(binary('a ')) | binary('a') = binary('a ') |
+------------------+-------------------+----------------------------+
| 61 | 6120 | 0 |
+------------------+-------------------+----------------------------+
1 row in set (0.00 sec)
mysql> select hex(char('a')), hex(char('a ')), char('a') = char('a ');
+----------------+-----------------+------------------------+
| hex(char('a')) | hex(char('a ')) | char('a') = char('a ') |
+----------------+-----------------+------------------------+
| 00 | 00 | 1 |
+----------------+-----------------+------------------------+
1 row in set, 4 warnings (0.00 sec)
4.4 BLOB、TEXT
BLOB和TEXT是用来存储二级制大数据类型,根据存储长度不同,可以分为以下几种类型:
BLOB类型 | TEXT类型 |
TINYBLOB() | TINYTEXT() |
BLOB() | TEXT() |
MEDIUMBLOB() | MEDIUMTEXT() |
LONGBLOB() | LONGTEXT() |
4.5 ENUM、SET
ENUM和SET都是枚举类型,不同的是ENUM最多可枚举 65536个元素,二SET最多可枚举64个元素,通常可配合sql_mode进行约束,如果插入不存在的枚举值,报错:
mysql> set sql_mode = 'STRICT_TRANS_TABLES';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> create table `person`(name varchar(50) not null, sex enum('Man', 'WMan'));
Query OK, 0 rows affected (0.10 sec)
mysql> insert into person values('Bob', 'M');
ERROR 1265 (01000): Data truncated for column 'sex' at row 1
mysql> insert into person values('Bob', 'Man');
Query OK, 1 row affected (0.09 sec)
mysql> select * from person;
+------+------+
| name | sex |
+------+------+
| Bob | Man |
+------+------+
1 row in set (0.00 sec)
内容总结
以上是互联网集市为您收集整理的《MySQL技术内幕:SQL编程》读书笔记 -- 数据类型全部内容,希望文章能够帮你解决《MySQL技术内幕:SQL编程》读书笔记 -- 数据类型所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。