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”?

Django:WebSocket 握手期间出错:意外的响应代码:500

Django-MySQL 启用 Row_Format=使用 syncdb 压缩