我正在使用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.问题是什么?
答案 0 :(得分:1)
由于文档状态here,65.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
。
如果您的字符串可以分成多个部分,则可以有多行。 (有第二列,其中包含某种行号。)