我已经从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)'。
答案 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个字节外)?