首先,值得注意的是,你可以在 mysql 上设置几个不同的字符集参数...
mysql> SHOW VARIABLES LIKE 'character_set_%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
...可以在 中配置my.cnf
,但一般只需要考虑其中的两个...
- 在磁盘上存储数据时使用的字符集。
- 客户端/服务器协议中使用的字符集。
其中第一个最初是在编译 mysql 时设置的,并且可以受configure
option 的影响,如果未指定--with-charset
,默认为。latin1
创建数据库时,您可以在每个数据库的基础上覆盖默认值...
CREATE DATABASE my_database CHARACTER SET 'utf8';
...或在使用...创建表时基于每个字段
CREATE TABLE my_table
(
...
my_field VARCHAR(255) CHARACTER SET 'utf8',
...
);
至于其中的第二个,我不确定默认值来自哪里,但您可以在每个连接的基础上覆盖它...
SET NAMES 'utf8';
...或者如果您正在使用MySQLdb
,最好在connect()
设置中指定它...
conn = MySQLdb.connect(host='my_host',
...
charset='utf8')
MySQLdb
文档中有更多信息,可能还值得一看MySQL 文档的第 10.1 节。