码迷,mamicode.com
首页 > 其他好文 > 详细

flask 建表语句和常见报错

时间:2016-04-23 23:09:44      阅读:516      评论:0      收藏:0      [点我收藏+]

标签:sqlalchemy.exc.internalerror: (internalerror) (1071   u'specified key was too long; max key length is 767 bytes')   

$ 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())


执行建表

sudo python manage.py db_setup

报错


sqlalchemy.exc.InternalError: (InternalError) (1071, u‘Specified key was too long; max key length is 767 bytes‘)



原因:

将字段设置成为unique后mysql会自动将唯一性索引建立在该字段上,,而对于维护唯一性索引又会存在着系统开销,所以就会出现这种问题,一方面提供唯一性索引,另外避免维护过长的索引造成的开销问题。

另外在mysql中还有一个问题必须注意,那就是utf-8默认是一个字符占用三个字节,对于GBK这些编码方式占用的是2个字节,因此如果你的字符集编码格式为utf-8的话,那么767/3=255个字符,只能支持到255个字符,而非767,这点需要特别注意。


解决办法,将有unique的字段变小,变成128 即可


本文出自 “崔德华运维打工从业路” 博客,请务必保留此出处http://cuidehua.blog.51cto.com/5449828/1767117

flask 建表语句和常见报错

标签:sqlalchemy.exc.internalerror: (internalerror) (1071   u'specified key was too long; max key length is 767 bytes')   

原文地址:http://cuidehua.blog.51cto.com/5449828/1767117

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!