django 在服务器上的 syncdb 期间出错
Posted
技术标签:
【中文标题】django 在服务器上的 syncdb 期间出错【英文标题】:Error during django's syncdb on server 【发布时间】:2011-05-31 15:42:31 【问题描述】:我有一个完整的 locale django 应用程序,但是在迁移到 site5 服务器时遇到了问题。
当我启动 django 的 syncdb
命令时,我的所有模型的表都已创建,但是 (我猜它是在创建关系表时),我收到以下错误:
_mysql_exceptions.OperationalError: (1071, 'Specified key was too long; max key length is 1000 bytes')
我要求django同步locale db没有任何问题,这个错误只发生在服务器...
有什么想法吗?
【问题讨论】:
也许您使用的是 utf8 数据库,因此您可能超过了 1000 字节的限制(因为一个字符最多可能占用 4 个字节)。如果您尝试运行python manage.py sqlall [package]
会发生什么?
您能否提供一些有关您在本地和远程服务器上使用的 MySQL 服务器版本的信息?此外,某些模型可能有用。似乎您在长 VARCHAR 列上有一个键。也许这些链接会给你线索:bugs.mysql.com/bug.php?id=4541bugs.mysql.com/bug.php?id=58187
你用的是什么 django 版本?
@Nedec:我使用的是 utf8 数据库,因为它是双语 eng-esp。 sqlall 说我的密钥都不超过 200 个字符。
所有 INDEX 键加在一起(总计)不得超过 1000 字节。
【参考方案1】:
看起来像 django 中的一个错误。它可能在 1.2 版本中被修复,例如http://code.djangoproject.com/changeset/13040
【讨论】:
Django 1.4.3 再次相遇 :(【参考方案2】:http://dev.mysql.com/doc/refman/5.0/en/create-index.html
前缀支持和前缀长度(如果支持)取决于存储引擎。例如,MyISAM 表的前缀最长可达 1000 字节,InnoDB 表的前缀最长可达 767 字节。
http://dev.mysql.com/doc/refman/5.0/en/charset-unicode.html
utf8,Unicode 字符集的 UTF-8 编码,每个字符使用一到三个字节
您在创建索引时超出了限制。
虽然 sqlall 告诉您没有一个键长于限制,但您可能会超过限制,因为您使用的是 utf8,每个字符使用 3 个字节。
另一个可能的原因是您在 Meta 中使用了“unique_together”。这将需要更长的索引,这可能会导致问题。
【讨论】:
'unique_together' 是我的原因,知道如何解决这个问题吗?我设置了 'unique_together' 因为我需要它。以上是关于django 在服务器上的 syncdb 期间出错的主要内容,如果未能解决你的问题,请参考以下文章
运行 Django 的 syncdb 时 OSX 10.7.3 上的 Postgresql 套接字错误
在 Python Django 中加载 Mysqldb 模块时出错
在 Django 1.9 中我应该使用啥来代替 syncdb?
在 django 中,如何从初始化脚本中调用子命令“syncdb”?