当字符编码为latin1
(单字节字符集)时,SQL
语句下面执行时没有错误。
create table chartype (chardata char(255));
但是当字符编码为UTF-8
时(每个字符为3个字节),
create table chartype (chardata char(255));
此语句应抛出错误但执行时没有任何错误。
char数据类型的最大长度为255 bytes
,对于UTF-8
编码,它应仅允许使用以下语句
create table chartype (chardata char(85));
85 * 3 = 255 bytes
,因此 85 是UTF-8
字符集的最大长度
请澄清我。
答案 0 :(得分:1)
当您说CHAR(255)
时,您正在创建一个可容纳255个字符的固定长度字段。这与字节不同。 UTF-8字符的长度从1到4个字节不等,具体取决于您所说的字符,但MySQL中的默认字符只能容纳3个字节的长度字符。
要处理所有Unicode字符,您需要使用utf8mb4
编码。
请务必使用VARCHAR
优先于CHAR
,因为CHAR
是固定长度,会造成大量浪费的空间。
答案 1 :(得分:0)
http://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html部分说:
对于存储多字节字符的VARCHAR列,有效的最大字符数较少。例如,utf8mb3字符每个字符最多可能需要三个字节,因此使用utf8mb3字符集的VARCHAR列可以声明为最多21,844个字符。
这同样适用于CHAR或TEXT,或任何其他支持字符集的数据类型。