当字符编码为latin1 (单字节字符集)时,在SQL语句下面执行时不会出错.
create table chartype (chardata char(255)); 但当字符编码为UTF-8 (每个字符为3字节)时,
create table chartype (chardata char(255)); 这条语句应该会抛出错误,但执行时不会出现任何错误。字符数据类型的最大长度为255 bytes,对于UTF-8编码,它应该只允许以下语句
create table chartype (chardata char(85));85*3=255 bytes,因此85是UTF-8字符集的最大长度。
请澄清我。
发布于 2016-09-22 17:36:46
当您说CHAR(255)时,您正在创建一个可以容纳255个字符的固定长度字段。这与字节不同。UTF-8字符的长度从1字节到4字节不等,这取决于您所讨论的字符,但在MySQL中,默认情况是只容纳3字节长的字符。
要处理完整范围的Unicode字符,您需要使用utf8mb4编码。
一定要优先使用VARCHAR而不是CHAR,因为CHAR的长度是固定的,造成了大量的浪费空间。
发布于 2016-09-22 17:43:17
http://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html部分地说:
对于存储多字节字符的VARCHAR列,有效的最大字符数较少。例如,utf8mb3字符每个字符最多需要三个字节,因此使用utf8mb3字符集的VARCHAR列最多可以声明为21,844个字符。
这同样适用于CHAR或TEXT,或支持字符集的任何其他数据类型。
https://stackoverflow.com/questions/39645110
复制相似问题