本文整理自网络,侵删。
——《深入浅出MySQL(第二版)》笔记
数值类型
整数类型 | 字节 | 最小值 | 最大值 |
---|---|---|---|
TINYINT | 1 | 有符号 -128;无符号 0 | 有符号 127;无符号 255 |
SMALLINT | 2 | 有符号 -2^16;无符号 0 | 有符号 2^16-1;无符号 2^17-1 |
MEDIUMINT | 3 | 有符号 -2^24;无符号 0 | 有符号 2^24-1;无符号 2^25-1 |
INT\INTEGER | 4 | 有符号 -2^32;无符号 0 | 有符号 2^32-1;无符号 2^33-1 |
BIGINT | 8 | 有符号 -2^64;无符号 0 | 有符号 2^64-1;无符号 2^65-1 |
浮点类型 | 字节 | 最大值 | 最小值 |
---|---|---|---|
FLOAT | 4 | ||
DOUBLE | 8 |
定点数类型 | 字节 | 描述 |
---|---|---|
DEC(M,D)\DECIMAL(M,D) | M+2 | 最大值取值范围与DOUBLE相同,给定DECIMAL的有效取值范围由M和D决定 |
位类型 | 字节 | 最小值 | 最大值 |
---|---|---|---|
BIT(M) | 1~8 | BIT(1) | BIT(8) |
整数类型
对于整数类型,MySQL支持在类型名称后面使用(n)
的方式指定显示宽度,例如int(5)
表示当数值宽度小于5位时,在数字前面填满宽度,如果不显示指定宽度则默认为int(11)
。一般配合zerofill使用,就是用'0'填充。
示例:
--创建表t1,有id1和id2两个字段,指定数值宽度分别为int和int(5) mysql> create table t1 (id1 int,id2 int(5)); mysql> desc t1;
--在id1和id2中都插入数值1 mysql> insert into t1 values (1,1); mysql> select * from t1;
--分别给id1和id2字段增加zerofill参数 mysql> alter table t1 modify id1 int zerofill; mysql> alter table t1 modify id2 int(5) zerofill;
设置了宽度限制后,如果插入大于宽度限制的值,不会对插入的数据有任何影响,还是按照类型的书记精度进行保存。这时,宽度格式实际已经没有意义,左边不会再填充任何的“0”字符。
--向表t1的id1中插入1,id2中插入12345678 mysql> insert into t1 values(1,12345678); mysql> select * from t1;
所有的整数类型都有一个可选属性UNSIGNED
(无符号),如果需要在字段里面保存非负数或者需要较大的上限值,可以用此选项。而当一个列指定为zerofill,则MySQL自动为该列添加UNSIGNED属性。
另外,整数类型还有一个独有的AUTO_INCREMENT
属性,表示该列的值是自增型。AUTO_INCREMENT值一般从1开始,每行增加1。在插入NULL到一个AUTO_INCREMENT列时,MySQL插入一个比该列当前最大值大1的值。一个表中最多只能有一个列是AUTO_INCREMENT的。
对于任何想要使用AUTO_INCREMENT的列,应该定义为NOT NULL,并定义为UNIQUE。
浮点类型
对于小数的表示,MySQL分为浮点数和定点数两种。浮点数包括float(单精度)和double(双精度),而定点数只有decimal一种。定点数在MySQL内部以字符串形式存放,比浮点数更精确,适合用来表示货币等精度高的数据。
浮点数和定点数都可以用类型名称后加"(M,D)"的方式来进行表示,"(M,D)"表示该值一共显示M位,小数有D位。MySQL保存浮点值时对超出位采用的是四舍五入的方式。因此如果在float(5,3)中插入123.006,则保存的值为123.01。float和double在不指定精度时,默认按照实际硬件和操作系统来决定;而decimal不指定时,默认整数位为10,小数位为0。
示例:
--创建表tf,分别将id1,id2,id3字段设置为float(5,2),double(5,2),decimal(5,2) mysql> create table tf( id1 float(5,2),id2 double(5,2),id3 decimal(5,2));
--向表中三个字段分别插入数据1.23 mysql> insert into tf values(1.23,1.23,1.23);
--向表中分别插入数据1234.005 mysql> insert into tf values(1234.005,1234.005,1234.005);
--向表中分别插入数据123.005 mysql> insert into tf values(123.005,123.005,123.005);
--向表中分别插入数据123.006,123.006,123.004 mysql> insert into tf values(123.006,123.006,123.004);
--去掉表tf字段的精度,并重新插入1.23 mysql> alter table tf modify id1 float; mysql> alter table tf modify id2 double; mysql> alter table tf modify id3 decimal; mysql> insert into tf values(1.23,1.23,1.23); mysql> desc tf;
--向表中分别插入1.234567123321,1.234567123321123321,1.23234233 mysql> insert into tf values(1.234567123321,1.234567123321123321,1.23234233);
位类型
对于BIT类型,用于存放位字段值,BIT(M)可以用来存放多位二进制数,M范围从1~64,如果不写,默认为1位。而直接使用SELECT命令不会看到查询结果,需使用bin()
(显示为二进制)函数或者hex()
(显示为16进制)函数进行读取。
示例:
--创建表tb,定义字段id1为bit(1),id2字段为bit mysql> create table tb(id1 bit(1),id2 bit);
--向tb中插入1,1 mysql> insert into tb values(1,1); mysql> select * from tb; mysql> select bin(id1),hex(id2) from tb;
数据插入bit两类型字段时,首先转换为二进制,如果位数允许,则成功插入;如果位数超出定义的位数,则插入失败。
时间类型
MySQL中由多种数据类型可以用于日期和时间的表示,下表是MySQL5.0中所有支持的日期和时间类型。
相关阅读 >>
更多相关阅读请进入《mysql》频道 >>

数据库系统概念 第6版
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。