先把mysql全都配成utf8,比较坑爹的是table charset貌似没法指定默认utf-8,必须create的时候指定
[client] default-character-set=utf8 [mysqld] collation-server = utf8_general_ci character-set-server = utf8
验证一下:
SHOW VARIABLES LIKE ‘character_set_%’; SHOW VARIABLES LIKE ‘collation_%’;
# -*- coding: utf-8 -*-
import sqlalchemy
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, BigInteger,String,Text
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
class Node(Base):
__tablename__ = 'node'
__table_args__ = {'mysql_engine':'InnoDB','mysql_charset':'utf8'}
id = Column(Integer, primary_key=True)
path = Column(String(255), index=True)
name = Column(String(255))
data = Column(Text)
datatype = Column(String(255))
if __name__ == '__main__':
engine = sqlalchemy.create_engine('mysql+mysqldb://root:123456@127.0.0.1:3306/dbname?charset=utf8', echo=True)
Base.metadata.drop_all(engine)
Base.metadata.create_all(engine)
Session = sessionmaker()
Session.configure(bind=engine)
session = Session()
session.commit()
n = Node()
n.path = "/"
n.name = "汉字"
session.add(n)
session.commit()
__table_args__指定了表编码,这样就可以很好支持中文了⋯ 如果有能在mysql配置里指定编码的方法请留言⋯