MySQL中的字符集,校对规则和数据库引擎

1. 字符集和校对规则

数据库表被用来存储和检索数据. 不同的语言和字符集需要以不同的方式存储和检索. 因此, MySQL需要使用不同的字符集, 适应不同的排序和检索数据的方式.

  • 字符集为字母和符号的集合;
  • 校对为规定字符如果比较的命令

MySQL支持众多的字符集, 下列语句可以查看字符集完整列表:

show charset;

这条语句显示所有可用的字符集以及每个字符集的描述和默认的校对规则



为了查看校对规则的完整列表, 使用以下语句:

show collation;

此语句显示所有可用的校对, 以及它们适用的字符集.



创建数据库时, 可以指定默认的字符集和校对:

CREATE DATABASE datebase_name CHARSET utf8 COLLATE utf8_general_ci;

该语句创建了一个数据库, 并将数据库的字符集设置为utf8, 校对规则设置为utf8_general_ci

  • 如果指定了character set 和 collate 两者, 则使用这些只
  • 如果只指定了character set, 则使用次字符集及其默认的校对
  • 如果都不指定, 则使用MySQL默认


为了在创建表时指定字符集和校对, 可使用带子句的 create table 语句

create table table_name(
    text1 varchar(50),
    text2 varchar(50 charset gbk collate gbk_chinese_ci
)default charset utf8 collate utf8_general_ci;

上述语句, 对整个表以及一个特定的列指定了character 和 collate.



如果你需要用与创建表时不同的校对规则排序指定的 select 语句, 可以在 select 语句自身中设置:

select * from table_name
order by text2 collate utf8_bin;

上述语句对text2字段使用了utf8的二进制顺序进行排序.

2. 数据库引擎

MySQL有一个具体管理和处理数据的内部引擎, 该引擎在内部处理你的素有请求. 多数时候, 它都隐藏在DBMS中, 不需要过多关注它.

MySQL有多种引擎,可以使用 show engines; 查看MySQL所支持的引擎

mysql表格对齐 mysql设置校对规则_ci


查看当前使用的引擎: show variables like '%storage_engine%'; 不同的引擎具有各自不同的功能和特性, 为不同的任务选择正确的引擎能获取良好的功能和灵活性.

以下介绍三种常用的数据库引擎:

  • InnoDB: 是一个可靠的事务处理引擎, 其它存储引擎都是非事务的. 它支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交和回滚。
  • MyISAM: 是一个性能极高的引擎. 插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。如果应用的完整性、并发性要求比较低,也可以使用。但是不支持外键和事务管理。
  • MEMORY: 所有的数据都在内存中,数据的处理速度快,但是安全性不高。如果需要很快的读写速度,对数据的安全性要求较低,可以选择MEMOEY。它对表的大小有要求,不能建立太大的表。所以,这类数据库只使用在相对较小的数据库表。

在创建数据表时可以指定使用数据库引擎:

create table table_name(
	...
)engine=InnoDB;

MySQL5.5版本之前默认引擎为MyISAM, 5.5版本之后默认InnoDB.