前言

报错:Error 1366: Incorrect string value

分析:字符集编码设置与要插入的内容不对应

字符集编码存在于两个地方

一、数据库

二、代码(连接数据库的驱动)

大多数人都仅仅关注到了数据库层面的编码,忘记了用代码连接数据库时也需要指定字符集编码。

下面我介绍一下如何在修改这两个地方的字符集编码

正文

一、代码(连接数据库的驱动)

这是经常被人们忽略的一点(我曾经在这个问题上花费过2天的时间,搜索无数资料,终无所获,最后偶然间发现问题所在)

无论是用Java、Python、Go或者其他高级语言,如果想要操作数据库都需要数据库驱动。

然后就会有一些配置,我这里介绍的是Go语言连接Mysql的驱动配置,如下所示:

mysql:
  dbUser: "root"
  dbPassword: ":123456"
  dbTcp: "@tcp(localhost:3306)"
  dbName: "/local_db"
  dbParameters: "?charset=utf8mb4"

其实上面完整的就是一句话  root:123456@tcp(localhost:3306)/local_db?charset=utf8mb4  为了方便修改,我把它拆解了。我们经常会在最后设置成utf8,而且常常忽略这一点,这就导致无法使用代码插入emoji表情👿!修改为utf8mb4即可。

二、数据库

这一点网上有很多教程,总的来说,数据库编码有四个层级。

  1. 数据库服务器
  2. 字段

1、数据库服务器修改编码需要去my.ini配置文件修改

Windows一般在 C:\ProgramData\MySQL\MySQL Server 5.7 目录下

Linux一般在 /etc/my.cnf  或者 /etc/mysql/my.cnf

在my.ini大约65行左右会有一句配置,default-character-set=utf8,将其修改为default-character-set=utf8mb4并保存,之后解开注释,注意,网上有人说还需要在mysqld下面也配置上,其实是不用的,至少Mysql5.7不用,否则,多配置的话,有可能造成数据库服务无法重启。

当然,如果你的这句默认配置在mysqld下面,那就去改mysqld下面的配置。总之一句话,此句配置只需要一句就行。

修改后并保存结果如下:

修改完配置之后,就需要重启Mysql服务器。

Windows可以在任务管理器中找到 服务,对应的Mysql57,右键重启即可。

Linux重启Mysql需要使用命令 service mysql restart 如果这个命令不好使,可以试试 service mysqld restart 

 

2、库

可以使用Navicat,右键库名,选择编辑数据库

也可以使用命令:

alter database 库名 default character set 字符集;

然后将对应的字符集设置为utf8mb4

3、表

目前我没有找到可视化操作修改表的字符集,只能通过命令

语法:alter table 表名 convert to character set 字符集;

4、字段

字段可以在Navicat中右键表-设计表

当然也可以使用命令:

语法:alter table 表名 modify 字段名 字段属性 character set 字符集;

如果你的字段是varchar或者其他字符类型的话,就可以在下面选择对应的字符集

总结

我们往往会忽略一些无足轻重的细节,但有些时候,就是这些细节,会让整个大厦崩塌!

 

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐