MySQL中char数据类型的最大长度错误

时间:2016-09-22 17:15:07

标签: mysql

当字符编码为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字符集的最大长度

请澄清我。

2 个答案:

答案 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,或任何其他支持字符集的数据类型。