1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
$ 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 即可
本文转自残剑博客51CTO博客,原文链接http://blog.51cto.com/cuidehua/1767117如需转载请自行联系原作者
cuizhiliang