0

我已经从 sql server 2005 切换到 mysql,这并不是一个真正的问题。

我对 sql server 中存在的 (n)varchar 有一个小问题。通常我用过:

mapping.Map(x => x.bla).Length(10000);

将 bla 设置为 nvarchar(max)。这在mysql中有效吗?我相信mysql中没有nvarchar,你必须使用这样的东西:

alter table sometable modify bla VARCHAR(21844) CHARACTER SET utf8

将现有列更新为“nvarchar(max)”。这是正确的,因为我得到:

“行大小太大。所用表类型的最大行大小”

如果我使用:

alter table sometable modify bla VARCHAR(1000) CHARACTER SET utf8

一切正常,但我不确定这是否在 mysql 中实现了“nvarchar(max)”。

4

1 回答 1

2

手册中所述

每个表(无论存储引擎如何)的最大行大小为 65,535 字节。存储引擎可能会对此限制施加额外的限制,从而减少有效的最大行大小。

最大行大小限制了列的数量(可能还有大小),因为所有列的总长度不能超过这个大小。例如,utf8字符每个字符最多需要三个字节,因此对于一CHAR(255) CHARACTER SET utf8列,服务器必须为每个值分配 255 × 3 = 765 个字节。因此,一个表不能包含超过 65,535 / 765 = 85 个这样的列。

可变长度列的存储包括长度字节,这些字节根据行大小进行评估。例如,一VARCHAR(255) CHARACTER SET utf8列需要两个字节来存储值的长度,因此每个值最多可以占用 767 个字节。

因此,您必须考虑表中存在哪些其他列并计算可用的最大大小VARCHAR

但是,如果您需要长文本值的空间,为什么不使用TEXT不受此限制约束的数据类型(它们贡献的 9 到 12 个字节除外)?

于 2012-05-01T09:12:48.280 回答