$ cat models/user.py #!/usr/bin/env python # encoding: utf-8 __author__ = 'Andy' from extensions import db from datetime import datetime class User(db.Model): __tablename__ = 'user' _id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String(256), nullable=False, unique=True) zh_name = db.Column(db.String(256), nullable=True) password = db.Column(db.String(256), nullable=False) _type = db.Column(db.Integer, nullable=False, default=1 ) #COMMENT='1 is User;2 is Admin, 3 is SuperAdmin' sex = db.Column(db.Enum('M', 'F'), nullable=False) email = db.Column(db.String(256), nullable=True, unique=True) favicon= db.Column(db.String(1024)) create_time = db.Column(db.DateTime, nullable=False, default=datetime.now()) last_update = db.Column(db.DateTime(), nullable=False, default=datetime.now())
执行建表python
sudo python manage.py db_setupmysql
报错sql
sqlalchemy.exc.InternalError: (InternalError) (1071, u'Specified key was too long; max key length is 767 bytes')ide
缘由:编码
将字段设置成为unique后mysql会自动将惟一性索引创建在该字段上,,而对于维护惟一性索引又会存在着系统开销,因此就会出现这种问题,一方面提供惟一性索引,另外避免维护过长的索引形成的开销问题。spa
另外在mysql中还有一个问题必须注意,那就是utf-8默认是一个字符占用三个字节,对于GBK这些编码方式占用的是2个字节,所以若是你的字符集编码格式为utf-8的话,那么767/3=255个字符,只能支持到255个字符,而非767,这点须要特别注意。orm
解决办法,将有unique的字段变小,变成128 便可sqlalchemy