数据类型介绍
四种主要数据类型:
- 数值类型
- 字符类型
- 时间类型
- 二进制类型 (比如存放视频,图片等)
数据类型的 ABC 要素:
- Appropriate(适当)
- Brief(简洁)
- Complete(完整)
数值类型
使用数值数据类型时的注意事项:
– 数据类型所表示的值的范围
– 列值所需的空间量
– 列精度和范围(浮点数和定点数)
• 数值数据类型的类:
– 整数:整数
– 浮点数:小数
– 定点数:精确值数值
– BIT:位字段值
类
|
类型
|
说明
|
整数
|
TINYINT
|
极小整数数据类型(0-255)
|
整数
|
SMALLINT
|
较小整数数据类型(-2^15 到2^15-1 )
|
整数
|
MEDIUMINT
|
中型整数数据类型
|
整数
|
INT
|
常规(平均)大小的整数数据类型(-2^31 到2^31- 1)
|
整数
|
BIGINT
|
较大整数数据类型(-2^63到2^63-1 )
|
浮点数
|
FLOAT
|
小型单精度(四个字节)浮点数
|
浮点数
|
DOUBLE
|
常规双精度(八个字节)浮点数
|
定点数
|
DECIMAL
|
包含整数部分、小数部分或同时包括二者的
精确值数值
|
BIT
|
BIT
|
位字段值
|
字符类型
• 表示给定字符集中的一个字母数字字符序列
• 用于存储文本或二进制数据
• 几乎在每种编程语言中都有实现
• 支持字符集和整理
• 属于以下其中一类
– 文本:真实的非结构化字符串数据类型
– 整数:结构化字符串类型
类
|
类型
|
说明
|
文本
|
CHAR
|
固定长度字符串,最多为 255 个字符
|
文本
|
VARCHAR
|
可变长度字符串,最多为 65,535 个字符
|
文本
|
TINYTEXT
|
可变长度字符串,最多为 255 个字符
|
文本
|
TEXT
|
可变长度字符串,最多为 65,535 个字符
|
文本
|
MEDIUMTEXT
|
可变长度字符串,最多为 16,777,215 个字符
|
文本
|
LONGTEXT
|
可变长度字符串,最多为 4,294,967,295 个 字符
|
整数
|
ENUM
|
由一组固定的合法值组成的枚举
|
整数
|
SET
|
由一组固定的合法值组成的集
|
char和varchar的对比:
char:性能比较高,但是定义多大长度就会直接占用多大长度,比较费空间
varchar: 性能稍微差一些,会动态调整占用长度,比较省空间。
mysql一般不建议存储太长的字符串,如果数据量比较大,不利于索引的扫描。
enum使用的也比较多,性能高于char和varchar,比如: create table stu (id int, name varchar(20), enum ('male','female'));
时间类型
类型
|
格式
|
示例
|
DATE
|
YYYY-MM-DD
|
2006-08-04
|
TIME
|
hh:mm:ss[.uuuuuu]
|
12:59:02.123456
|
DATETIME
|
YYYY-MM-DD hh:mm:ss[.uuuuuu]
|
2006-08-04
12:59:02.123
|
TIMESTAMP
|
YYYY-MM-DD hh:mm:ss[.uuuuuu]
|
2006-08-04 12:59:02.12
|
YEAR
|
YYYY
|
2006
|
datetime 和 timestamp之间建议选择datetime
二进制类型
字节序列
– 二进制位按八位分组
• 存储二进制值,例如:
– 编译的计算机程序和应用程序
– 图像和声音文件
• 字符二进制数据类型的类:
– 二进制:固定长度和可变长度的二进制字符串
– BLOB:二进制数据的可变长度非结构化集合
类
|
类型
|
说明
|
二进制
|
BINARY
|
类似于 CHAR(固定长度)类型,但存储的是 二进制字节字符串,而不是非二进制字符串
|
二进制
|
VARBINARY
|
类似于 VARCHAR(可变长度)类型,但存储的是二进制 字节字符串,而不是非二进制字符串
|
BLOB
|
TINYBLOB
|
最大长度为 255 个字节的 BLOB 列
|
BLOB
|
BLOB
|
最大长度为 65,535 个字节的 BLOB 列
|
BLOB
|
MEDIUDMBLOB
|
最大长度为 16,777,215 个字节的 BLOB 列
|
BLOB
|
LONGBLOB
|
最大长度为 4,294,967,295 个字节的 BLOB 列
|
数据类型设置
例 1:列声明
CREATE TABLE people ( id INT, first_name CHAR(30), last_name CHAR(30) );
例 2:不允许负值和未知值
CREATE TABLE people ( id INT UNSIGNED NOT NULL, first_name CHAR(30), last_name CHAR(30) );
列属性
列属性的类别:
• 数值:适用于数值数据类型(BIT 除外)
• 字符串:适用于非二进制字符串数据类型
• 常规:适用于所有数据类型
据类型
|
属性
|
说明
|
数值
|
UNSIGNED
|
禁止使用负值
|
仅整数
|
AUTO_INCREMENT
|
生成包含连续唯一整数值的序列
|
字符串
|
CHARACTER SET
|
指定要使用的字符集
|
字符串
|
COLLATE
|
指定字符集整理
|
字符串
|
BINARY
|
指定二进制整理
|
全部*
|
NULL 或 NOT NULL
|
指示列是否可以包含 NULL 值
|
全部
|
DEFAULT
|
如果未为新记录指定值,则为其提供默认值
|
create table student(id int not null primary key AUTO_INCREMENT); create table student1(id int not null primary key AUTO_INCREMENT,name varchar(20)) charset utf8; create table teacher(id int not null ,name varchar(20) not null); create table teacher1(id int not null ,name varchar(20) not null,beizhu varchar(20) not null default "ok");
primary key 主键:非空、唯一
unique:唯一
数据类型的字符集用法
选择合适的数据类型
具体如何选择数据类型:
考虑哪些数据类型和字符集可以最大限度地减少存储和磁盘 I/O。
• 使用固定长度数据类型:
– 如果存储的所有字符串值的长度相同
• 使用可变长度数据类型:
– 如果存储的字符串值不同
– 对于多字节字符集
• 对于频繁使用的字符,使用占用空间较少的多字节字符集。
– 使用基本多文种平面 (Basic Multilingual Plane, BMP) 之外的其他 Unicode 字符集。