mysql流利的nhibernate问题nvarchar

时间:2012-05-01 09:07:03

标签: mysql nhibernate fluent-nhibernate

我已经从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)'。

1 个答案:

答案 0 :(得分:2)

the manual中所述:

  

每个表(无论存储引擎如何)的最大行大小为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个字节外)?