MySQL 5.6中的字符集

  

 

概论


基础概念

是编码和字符符号的映射集合。是用于比较字符集中字符的规则集。

 

 

是指一个字符集中字符的集合。字符串表达式都有一个repertoire属性,这个属性可以有两个值:

 

 

 


元数据的字符集

 

的值设置为与元数据所使用的字符集的相同:

的值决定的,默认值是latin1:

命令来强制服务器将当前字符集转换成指定的character_set,该命令会自动设置character_set_results等相关的系统变量,仅对当前会话生效。如果character_set_results被设为NULL,服务器返回元数据时将不进行转换,而使用它原本的字符集(即变量character_set_system所指示的字符集)。

 

 


存储数据时的字符集

 

和,分别由变量和变量控制。你可以在MySQL配置文件中或MySQL启动选项中设置这两个选项的值,也支持使用set命令进行动态修改,有全局值和会话值两种。character_set_server的默认值是latin1字符集,collation_server的默认值是latin1_swedish_ci排序规则。如果你只指定了字符集,而没有指定排序规则,那么系统会自动将排序规则设置为该字符集的默认排序规则。比如,如果你将character_set_server的值设置为utf8mb4字符集而没有设置collation_server的值,那么collation_server的值会自动变为utf8mb4_general_ci排序规则,因为utf8mb4_general_ci是utf8mb4字符集的默认排序规则。

命令创建数据库时如果没有指定数据库字符集和排序规则, 那么服务器端字符集和排序规则就会作为默认值,它们的用途仅在于这里。因此可以说,服务器端字符集和排序规则是MySQL数据库中数据(除元数据外)的可能的默认值。

 

和。CREATE DATABASE 和 ALTER DATABASE语句都有选项可以指定数据库字符集和排序规则:

]

]

 

]

]

  • 和都指定了,那么数据库字符集和排序规则就是所指定的和。

  • 而没有指定,那么数据库字符集和排序规则就是所指定的和该字符集默认的排序规则。

  • 而没有指定,那么数据库字符集和排序规则就是该相关联的字符集和所指定的。

  • 和都没有指定,那么数据库字符集和排序规则就使用MySQL服务器字符集和排序规则(见上一小节)。

和 这两个系统变量得知。要查看指定数据库的默认字符集和排序规则,使用命令:

;

';

  • 语句,如果创建表时未显式指定字符集和排序规则,数据库字符集和排序规则被用做表的默认字符集和排序规则。要覆盖该行为,显式使用 和 选项。

  • 选项的语句,服务器使用变量character_set_database所指示的字符集来解析文件中的信息。要覆盖该行为,显式使用选项。

  • 和 选项,那么数据库字符集和排序规则会用做字符数据参数的字符集和排序规则。要覆盖该行为,显式使用 和 选项。

 

和。 和 语句都有选项可以指定表字符集和排序规则:

()   null

MySQL 5.6中的字符集