MySQL字符集

一. 选择合适的字符集(P156)

 


 

二. MySQL支持的字符集

MySQL服务器可以支持多种字符集,在同一台服务器、同一个数据库甚至同一个表的不同字段都可以指定使用不同的字符集。

查看所有可用的字符集命令是show character set;

或者查看information_schema.character_set,可以显示所有的字符集和该字符集默认的校对规则。desc information_schema.character_sets;

MySQL的字符集包括字符集(CHARACTER)和校对规则(COLLATION)两个概念。其中字符集用来定义MySQL存储字符串的方法,校对规则用来定义比较字符串的方式。一个字符集可以有多种校对规则。

 


 

三. MySQL字符集的设置(P161)

MySQL的字符集和校对规则有4个级别的默认设置:服务器级、数据库级、表级和字段级。

 

如果没有特别的指定服务器字符集,那么默认使用latin1作为服务器字符集。如果像上面那样没有指定校对规则,就会使用默认的校对规则。需要的时候可以在指定字符集的同时指定校对规则。

 


 四. 数据库字符集和校对规则

数据库的字符集和校对规则在创建数据库的时候指定,也可以在创建完数据库后通过alter database命令进行修改。如果数据库中已存在数据,修改字符集并不能将已有的数据按照新字符据进行存放

 设置数据库字符集的规则如下:

  • 如果指定了字符集和校对规则,那么就用制定的;
  • 如果指定了字符集没有指定校对规则,则使用指定字符集默认的校对规则;
  • 如果指定了校对规则没指定字符集,则字符集使用与校对规则关联的字符集;
  • 如果没有指定字符集和校对规则,则使用服务器字符集和校对规则作为数据库的字符集和校对规则;

推荐在创建数据库时指定字符集和校对规则,避免受到默认值的影响。显示当前数据库的字符集和校对规则:

 

 

 

表字符集和校对规则

表的字符集和校对规则可以在创建是指定,也可用通过alter table命令进行修改,同样,修改表的 字符集,对表中原有的记录并没有影响。表中的字段仍然使用原来的字符集。

  • 指定了字符集和校对规则,使用指定的;
  • 指定了字符集没有指定校对规则,使用指定字符集默认的校对规则;
  • 指定了校对规则但未指定字符集,则使用与校对规则关联的字符集;
  • 如果没有指定字符集和校对规则,使用数据库的字符集和校对规则作为表的字符集和校对规则。

显示表的字符集和校对规则:

 

 

列字符集和校对规则

列字符集和校对规则的定义可以在创建表时指定,或者在修改表时调整,如果在创建表的时候没有特别指定字符集和校对规则,则默认使用表的字符集和校对规则。需要使用这种特性的几率比较小。

连接字符集和校对规则

对于实际的应用访问来说,还存在客户端和服务器之间交互的字符集和校对规则设置。

对于客户端和服务器的交互操作,MySQL提供了3个不同的参数:character_set_client、character_set_connection和character_set_resutls,分别代表客户端、连接和返回结果的字符集。通常情况下,这3个字符集应该是相同的,才可以确保用户写入的数据可以正确的读出,特别是对于中文字符,不同的写入字符集和返回结果字符集将导致写入的记录不能正确的读出。

set names ***;可以同时修改这3个参数的值。使用这个方法修改连接的字符集和校对规则,需要应用每次连接数据库后都执行这个命令

 

以上为在my.cnf中设置配置文件


 

五. 字符集的修改步骤(P165)

alter database character set ***;

alter table tablename character set ***;

这两个命令都没有更新已有记录的字符据,而只是对新创建的表或者记录生效。已有记录的字符集调整,需要先将数据导出,经过适当的调整重新导入后才可以完成

posted @ 2017-07-05 23:08  TooLateToLearn!  阅读(219)  评论(0编辑  收藏  举报