Error Code: 1366. Incorrect string value
问题描述:在mysql中向表格插入中文时报错
原因分析:安装mysql时如果不进行配置,系统默认使用latin1字符集,而不是使用utf8,latin1字符集不支持中文。
此时执行sql代码:
show variables like 'character%';
会发现character_set_database和character_set_server的值为lantin1(或许有更多的值为latin1)。
解决思路:
1.配置文件使mysql默认使用utf8字符集,若配置成功,则此后在新建的表中即可以使用中文。
配置方法:在window和linux中,以及在linux的不同的版本中,所要修改的配置文件可能会不同,我此时用的是ubantu18.04.1,以此为例
1)打开配置文件(要用root权限才能修改):
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
2)在[mysqld_safe]和[mysqld]下添加如下代码(设置默认字符集为utf8):
[mysqld_safe]
default-character-set = utf8
[mysqld]
character-set-server = utf8
3)重启mysql
service mysql restart
4)再次执行sql代码:
show variables like 'character%';
会发现character_set_database和character_set_server的值已经变为utf8(或许有更多的值变为utf8)。
2.当我们遇到此问题时,往往是已经把表建好了,即使执行完第1步的更改,会发现依然不能往表中插入中文。因为建好的表已经有默认的字符集,即latin1。可以用sql语句
show create table <table_name>;
查看该表的详细信息。此时会发现表的默认字符集为latin1(DEFAULT CHARSET=latin1),或许在一些属性中也会默认使用latin1字符集。只要把表的字符集和所有属性的字符集更改为utf8即可,sql代码
alter table <table_name> convert to character set utf8;