MySQL的开发规范-数据类型及列属性

数据类型介绍

 
四种主要数据类型:
  • 数值类型
  • 字符类型
  • 时间类型
  • 二进制类型 (比如存放视频,图片等)
 
数据类型的 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 字符集。

posted @ 2019-10-10 16:55  早晨我在雨中采花  阅读(318)  评论(0)    收藏  举报