Django内存数据库模型创建失败

时间:2015-06-11 17:36:38

标签: python mysql django mariadb

我正在使用MariaDB MEMORY引擎。我在max_heap_table_size中定义了my.cnf,重新启动了数据库服务。现在,我运行迁移并获取:

django.db.utils.ProgrammingError: Storage engine MEMORY doesn't support BLOB/TEXT columns

我的错误模型是:

class Department(models.Model):
    name = models.CharField(max_length=100)
    tag = models.CharField(max_length=10)
    dtype = models.PositiveSmallIntegerField()
    info = models.CharField(max_length=64000)

虽然,最大VARCHAR是65535.问题是什么?

2 个答案:

答案 0 :(得分:1)

由于文档状态here65.535实际上是字节,如果使用UTF-8,则最多会产生21.844个字符。

  

可变长度字符串。 M表示最大列长度   字符。 M的范围是0到65,535。有效最大值   VARCHAR的长度受最大行大小(65,535字节,   这是在所有列之间共享的)和使用的字符集。对于   例如,utf8字符每个字符最多需要三个字节,   因此可以声明使用utf8字符集的VARCHAR列   最多21,844个字符。

由于Django模型中CharField的{​​{3}}以字符而不是以字节为单位指定长度,我认为这是导致错误的原因。

答案 1 :(得分:0)

制作表MyISAM或InnoDB。要么会快速缓存你的字符串,从而做出响应,好像它是“在内存中”。

至于令人困惑的错误消息 - 需要超过64K 字节的VARCHAR 会自动转为MEDIUMTEXT

如果您的字符串可以分成多个部分,则可以有多行。 (有第二列,其中包含某种行号。)