MySQL字符集设置

    |     2017年8月31日   |   数据库   |     0 条评论   |    1451

MySQL 对字符集的支持可以细到四个层次:服务器(server)、数据库(database)、数据表(table)和连接(connection)。指定时还能落到一个库、一张表、一列该用什么字符集。

传统程序建库建表往往不配这么细,用的是默认值;默认不对,查询和入库就会乱码。

一、相关系统变量

• 系统变量:
– character_set_server:默认的内部操作字符集
– character_set_client:客户端来源数据使用的字符集
– character_set_connection:连接层字符集
– character_set_results:查询结果字符集
– character_set_database:当前选中数据库的默认字符集
– character_set_system:系统元数据(字段名等)字符集
变量 含义
character_set_server 默认的内部操作字符集
character_set_client 客户端来源数据使用的字符集
character_set_connection 连接层字符集
character_set_results 查询结果字符集
character_set_database 当前选中数据库的默认字符集
character_set_system 系统元数据(字段名等)字符集

二、结果字符集转换

操作结果会从内部操作字符集转换成 character_set_results:

mysqlcharset

三、默认字符集从哪来

字符集可以细到库、表、列。没配复杂选项时走默认:

  • 编译 MySQL 时指定默认字符集,这个值是 latin1。
  • 安装时可以在配置文件 my.ini 里指定;没指定就继承编译时的值。
  • 启动 mysqld 时可以在命令行指定;没指定就继承配置文件,此时 character_set_server 被设为这个默认字符集。
  • 安装时若选多语言支持,安装程序会自动在配置文件把 default_character_set 设为 UTF-8,保证缺省下库、表、列都用 UTF-8 存储。

默认情况下 MySQL 字符集是 latin1(ISO_8859_1)。

四、修改默认字符集

1. 改 my.ini

最简单的办法是改 mysql 的 my.ini 里的字符集键值,例如:

default-character-set = utf8
character_set_server = utf8

改完后重启 mysql 服务。

2. 用 SQL 命令

mysql> SET character_set_client = utf8 ;
mysql> SET character_set_connection = utf8 ;
mysql> SET character_set_database = utf8 ;
mysql> SET character_set_results = utf8 ;
mysql> SET character_set_server = utf8 ;
mysql> SET collation_connection = utf8 ;
mysql> SET collation_database = utf8 ;
mysql> SET collation_server = utf8 ;

表的默认字符集已经是 utf8,查询也用 UTF-8 发出去,入库仍乱码,多半是 connection 连接层的问题。发送查询前执行:SET NAMES 'utf8'; 它相当于下面三句:

SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;

一句话总结:MySQL 字符集分 server / database / table / connection 四层;表已是 utf8 仍乱码时,先 SET NAMES ‘utf8’ 对齐连接层。

转载请注明来源:MySQL字符集设置
本文链接地址:https://ai.zhousir.top/?p=2152
回复 取消