在使用 SQLAlchemy 連到 MySQL 上create 出來的 table, 預設都是
DEFAULT CHARSET=latin1
即使 SQLAlchemy 在設定 echo=True, 有看到SQLAlchemy有去設定 connection 的 Charset=’utf-8′, 結果 table 出來還是 latin1
SQLAlchemy 官方文件:
MySQL
http://docs.sqlalchemy.org/en/latest/dialects/mysql.html
Engine Configuration
http://docs.sqlalchemy.org/en/latest/core/engines.html
Mysql 看 create table 句子:
mysql> show create table device;
結果:
| device | CREATE TABLE `device` ( `UDID` varchar(60) NOT NULL, `IP` varchar(20) DEFAULT NULL, `queue` blob, PRIMARY KEY (`UDID`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
解法,修改 MySQL Server 的系統設定檔:
修改 /etc/my.cnf:
[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] collation-server=utf8_general_ci init-connect='SET NAMES utf8' character-set-server = utf8 # Recommended in standard MySQL setup sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_BACKSLASH_ESCAPES