记录设置数据库字符集。
1、当向数据库插入表,或者在表中插入数据时,出现
ERROR 1366 (HY000): Incorrect string value: ‘\xBD\xF0\xD3\xB9’ for column ‘name’ at row 1
原因 数据库编码方式 和 表编码方式 以及 插入数据(字符串)的编码方式不同
我们可以查看数据库和数据表的编码格式
show create database database_name; show create table table_name;
2、修改database的字符集
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;
3、修改表默认的字符集
ALTER TABLE table_name DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
4、修改表默认的字符集和所有字符列的字符集
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
5、单独修改column默认的字符集
ALTER TABLE table_name CHANGE column_name column_name varchar(200) character SET utf8mb4 COLLATE utf8mb4_general_ci;
注意内容
1、字段长度
由于从utf8升级到了utf8mb4,一个字符所占用的空间也由3个字节增长到4个字节,但是我们当初创建表时,
设置的字段类型以及最大的长度没有改变。例如,你在utf8下设置某一字段的类型为TINYTEXT, 这中字段类型
最大可以容纳255字节,三个字节一个字符的情况下可以容纳85个字符,四个字节一个字符的情况下只能容纳63
个字符,如果原表中的这个字段的值有一个或多个超过了63个字符,那么转换成utf8mb4字符编码时将转换失
败,你必须先将TINYTEXT更改为TEXT等更高容量的类型之后才能继续转换字符编码。
2、索引
在InnoDB引擎中,最大的索引长度为767字节,三个字节一个字符的情况下,索引列的字符长度最大可以达到
255,四个字节一个字符的情况下,索引的字符长度最大只能到191。如果你已经存在的表中的索引列的类型为
VARCHAR(255)那么转换utf8mb4时同样会转换失败。你需要先将VARCHAR(255)更改为VARCHAR(191)才能继续
转换字符编码。