mysql errorcode 1366_mysql数据库保存异常:state「HY000」;error code「1366」

今天开发微信授权登录,需要保存用户昵称,发现有一个同事授权登录一直报错,查看了日志,发现日志提示:

uncategorized SQLException; SQL state [HY000]; error code [1366]; Incorrect string value

5ac15ef1bc9f4e86fc162d5274c83d94.png错误日志

一、原因分析

1、查看服务接口api编码

通过UrlDecode对接口api解码发现,接口使用方对接口api进行了GBK编码。

2、查看mysql数据表中对应字段

发现数据表中的编码格式是utf8的。

通过这个就可以很明显的看出来,是因为存储的数据是十六进制的字符

3、查看mysql字符集所支持的字节范围

08a8644cea79800dcba75e063d37f45a.png

我们可以知道utf8最大支持3个字节的字符,查看mysql官网发现,mysql5.5.3之后,新增了一个与utf-8类似的字符集,utf8mb4,并且它的编码支持4个字节每字符

二、解决方法

1、我们可以修改该字段的字符集格式为utf8mb4

2、我们可以通过修改mysql的my.cnf文件中的字符集键值,

2.1、在[client]字段里加入default-character-set=utf8,如下:

[client]

port = 3306

socket = /var/lib/mysql/mysql.sock

default-character-set=utf8

2.2、在[mysqld]字段里加入character-set-server=utf8,如下:

[mysqld]

port = 3306

socket = /var/lib/mysql/mysql.sock

character-set-server=utf8

2.3、在[mysql]字段里加入default-character-set=utf8,如下:

[mysql]

no-auto-rehash

default-character-set=utf8

修改完成后,service mysql restart重启mysql服务就生效。注意:[mysqld]字段与[mysql]字段是有区别的。

2.4、如果上面的都修改了还有乱码,在connection连接上进行编码修改

SET character_set_client = utf8;

SET character_set_results = utf8;

SET character_set_connection = utf8;

三、总结

1、对接口api制定详细使用说明 aName进行UTF-8编码,避免刚接触的使用者调到坑中。

2、系统中涉及编码 统一使用UTF-8。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值