我正在使用 sqlalchemy 创建我的数据库的架构。无论我尝试什么,我都没有成功强制使用 utf-8。
这是一个重现我的问题的最小 python 脚本:
from sqlalchemy import create_engine, Column, Unicode
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine('mysql+mysqldb://user:password@localhost/multidic?charset=utf8', echo=True)
Base = declarative_base()
class MyTableName(Base):
__tablename__ = "mytablename"
test_column = Column(Unicode(2),primary_key=True)
Base.metadata.create_all(engine)
运行此脚本后,当我查看数据库时,我看到编码是 latin1 而不是 utf-8:
mysql> SHOW FULL COLUMNS FROM mytablename;
+-------------+------------+-------------------+------+-----+---------+-------+---------------------------------+---------+
| Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment |
+-------------+------------+-------------------+------+-----+---------+-------+---------------------------------+---------+
| test_column | varchar(2) | latin1_swedish_ci | NO | PRI | NULL | | select,insert,update,references | |
+-------------+------------+-------------------+------+-----+---------+-------+---------------------------------+---------+
1 row in set (0.00 sec)
我尝试更改创建的列的类型(String而不是Unicode),并尝试在对create_engine的调用中添加参数encoding = "utf8",但都没有奏效。
所以,我的问题是:
如何使用 sqlalchemy 在 MySQL 中强制使用给定的字符编码(在我的情况下为 utf-8)?
谢谢 :)
笔记:
我正在使用 sqlalchemy 0.7 和 python 2.7;我可以升级一个或两个,但前提是它是唯一的解决方案!
我有 mysql 5,它支持 utf-8:
mysql> show character set where charset="utf8";
+---------+---------------+-------------------+--------+
| Charset | Description | Default collation | Maxlen |
+---------+---------------+-------------------+--------+
| utf8 | UTF-8 Unicode | utf8_general_ci | 3 |
+---------+---------------+-------------------+--------+
1 row in set (0.00 sec)