已解决Error 1366: Incorrect string value即操作Mysql数据库无法插入Emoji表情的问题
前言报错:Error 1366: Incorrect string value分析:字符集编码设置与要插入的内容不对应字符集编码存在于两个地方一、数据库二、代码(连接数据库的驱动)大多数人都仅仅关注到了数据库层面的编码,忘记了用代码连接数据库时也需要指定字符集编码。下面我介绍一下如何在修改这两个地方的字符集编码正文一、代码(连接数据库的驱动)这是经常被人们忽...
前言
报错: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、数据库服务器修改编码需要去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或者其他字符类型的话,就可以在下面选择对应的字符集
总结
我们往往会忽略一些无足轻重的细节,但有些时候,就是这些细节,会让整个大厦崩塌!
更多推荐
所有评论(0)