字符集编码
字符集是一套符号和编码。mysql、database、table、column都可以设置编码。
--查看所有字符集编码项命令
show variables like 'character_set_%';
选项名 | 备注 |
---|---|
character_set_client | 客户端向服务器发送数据时使用的编码 |
character_set_results | 服务器端返回给客户端的结果所使用的编码 |
character_set_connection | 数据库连接编码 |
character_set_database | 数据库编码 |
character_set_filesystem | 文件系统编码 |
character_set_server | 服务端编码 |
character_set_system | 系统编码 |
character_set_dir | 指定字符编码文件路径 |
- 更改字符编码
命令格式:set 变量名 = 字符编码;
ex:
set character_set_client = utf8;
set character_set_results = utf8;
set character_set_connection = utf8;
ps:可以通过格式: set names 字符编码 来同时设置character_set_client、character_set_connection、character_set_result的编码
校对集
校对集是数据比较的方式,共有三种格式:_bin:binary, 二进制比较, 区分大小写;_cs: case sensitive, 大小写敏感;_ci: case insensitice, 大小写不敏感;校对集必须在没有数据之前设置才有效,如果在已有数据的情况下进行修改,那么修改无效。
--显示所有字符集
show character set;
show charset;
--显示符合匹配规则的字符集
show character set like '%d%';
show charset like '%d%';
--显示所有校对集
show collation;
--显示符合匹配规则的校对集
show collation like '%d%';
--设置字符集编码为utf8
charset utf8;
--设置校对集编码
collate utf8_general_ci;
数据类型
- 数值类型
整型
类型 | 字节 |
---|---|
tinyint | 1字节 |
smallint | 2字节 |
mediumint | 3字节 |
int | 4字节 |
bigint | 8字节 |
int(M) M表示总位数。默认存在符号位,unsigned 属性修改显示宽度,如果某个数不够定义字段时设置的位数,则前面以0补填,zerofill 属性修改
ps:MySQL没有布尔类型,通过整型0和1表示。常用tinyint(1)表示布尔型。
浮点型
类型 | 字节 |
---|---|
float(单精度) | 4字节 |
double(双精度) | 8字节 |
浮点型既支持符号位 unsigned 属性,也支持显示宽度 zerofill 属性。不同于整型,前后均会补填0.定义浮点型时,需指定总位数和小数位数。float(M, D) double(M, D)M表示总位数,D表示小数位数。M和D的大小会决定浮点数的范围。不同于整型的固定范围。M既表示总位数(不包括小数点和正负号),也表示显示宽度(所有显示符号均包括)。支持科学计数法表示。浮点数表示近似值。
定点数
decimal是可变长度。decimal(M, D) M也表示总位数,D表示小数位数。保存一个精确的数值,不会发生数据的改变,不同于浮点数的四舍五入。将浮点数转换为字符串来保存,每9位数字保存为4个字节。
- 字符串类型
char, varchar
char 定长字符串,速度快,但浪费空间。varchar 变长字符串,速度慢,但节省空间。char(M)、varchar(M)M表示能存储的最大长度,此长度是字符数,非字节数。不同的编码,所占用的空间不同。char,最多255个字符,与编码无关。varchar,最多65535字符,与编码有关。一条有效记录最大不能超过65535个字节。utf8 最大为21844个字符,gbk 最大为32766个字符,latin1 最大为65532个字符。varchar 是变长的,需要利用存储空间保存 varchar 的长度,如果数据小于255个字节,则采用一个字节来保存长度,反之需要两个字节来保存。varchar 的最大有效长度由最大行大小和使用的字符集确定。最大有效长度是65532字节,因为在varchar存字符串时,第一个字节是空的,不存在任何数据,然后还需两个字节来存放字符串的长度,所以有效长度是64432-1-2=65532字节。
blob, text
blob 二进制字符串(字节字符串)
tinyblob, blob, mediumblob, longblob
text 非二进制字符串(字符字符串)
tinytext, text, mediumtext, longtext
text 在定义时,不需要定义长度,也不会计算总长度。
text 类型在定义时,不可给default值。
binary, varbinary
类似于char和varchar,用于保存二进制字符串,也就是保存字节字符串而非字符字符串。char, varchar, text 对应 binary, varbinary, blob。
日期时间类型
datetime 8字节 日期及时间 1000-01-01 00:00:00 到 9999-12-31 23:59:59
date 3字节 日期 1000-01-01 到 9999-12-31
timestamp 4字节 时间戳 19700101000000 到 2038-01-19 03:14:07
time 3字节 时间 -838:59:59 到 838:59:59
year 1字节 年份 1901 - 2155
枚举和集合
枚举(enum)
enum(val1, val2, val3...)
在已知的值中进行单选。最大数量为65535.
枚举值在保存时,以2个字节的整型(smallint)保存。每个枚举值,按保存的位置顺序,从1开始逐一递增。
表现为字符串类型,存储却是整型。
NULL值的索引是NULL。
空字符串错误值的索引值是0。
集合(set)
set(val1, val2, val3...)
create table tab ( gender set('男', '女') );
insert into tab values ('男, 女');
最多可以有64个不同的成员。以bigint存储,共8个字节。采取位运算的形式。当创建表时,SET成员值的尾部空格将自动被删除。