所有的程序、代码都要考虑国际化问题!否则就会遇到乱码的情况。mysql默认的编码都是latin1
,因此如果在配置mysql、建库等操作使用默认的话,乱码问题必然会遇到。
编码设置的几个地方:
my.cnf
- mysql client连接
- sqlalchemy连接数据库
- create database/table时指定编码
mysql可用的collation
: show collation
关于中文使用哪种collation: 建议选择 utf8_unicode_ci
,原因参考:whats-the-difference-between-utf8-general-ci-and-utf8-unicode-ci via stackoverflow
[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
collation-server=utf8_unicode_ci
之后建立database, table都默认utf8了。
mysql manual: http://dev.mysql.com/doc/refman/5.5/en/charset-database.html
若不能修改mysql server配置,则可以使用更保险的方法: create database db_name default character set utf8 default collate utf8_unicode_ci;
alter database db_name default character set utf8 default collate utf8_unicode_ci;
若连database都无法更改,也可以创建/修改表的编码,mysql manual: http://dev.mysql.com/doc/refman/5.5/en/charset-table.html
create table table_name (...) default character set utf8 collate utf8_unicode_ci
`alter table table_name (...) default character set utf8 collate utf8_unicode_ci``