MySQL字符集设置
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_results:
三、默认字符集从哪来
字符集可以细到库、表、列。没配复杂选项时走默认:
-
编译 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 里的字符集键值,例如:
改完后重启 mysql 服务。
2. 用 SQL 命令
表的默认字符集已经是 utf8,查询也用 UTF-8 发出去,入库仍乱码,多半是 connection 连接层的问题。发送查询前执行:SET NAMES 'utf8'; 它相当于下面三句:
一句话总结:MySQL 字符集分 server / database / table / connection 四层;表已是 utf8 仍乱码时,先 SET NAMES ‘utf8’ 对齐连接层。
转载请注明来源:MySQL字符集设置








