Linux数据库1366错误,线上问题 - MySQL SQL state [HY000]; error code [1366]

一、问题描述

另外一个系统调用服务接口api:/xxx/create?aName=&time=&...,数据没有保存成功提示SQL state [HY000]; error code [1366]; Incorrect string value: '\xA1\xAA\xA1\xAA\xB0\xFC...' for column 'content' at row 1; 相信大家看到这个错误码大概就知道什么原因了。

而当在windows系统中去调用接口并使用相同的数据库,数据竟保存成功了但是数据库中查看数据aName值却是乱码。

为什么在不同的操作系统中,相同的操作截然不同的结果?

二、原因分析

1、查看服务接口api的编码

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

2、MYSQL字符集

SHOW VARIABLES LIKE 'character%';

9ce0dda27a0aad09f46f3437279b0a0b.png

解决问题的方法就很明了了,将接口api进行UTF-8编码就可以解决此问题。

我们知道Windows系统默认的编码格式GBK,Linux系统默认的编码格式UTF-8。

三、MYSQL字符集修改

UTF-8 ——支持几乎所有字符

GB2312 ——是简体中文的码

GBK ——支持简体中文及繁体中文中的任何一个。

MySQL对于字符集的指定可以细化到一个数据库、一张表、一列(字段),应该用什么字符集。

在create语句中通过添加character set 参数指定相应的字符集,如果不指定,则会默认使用其上一个层级的字符集。

83dd583fd844dd1b7e5009c0437b5955.png

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

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

port = 3306

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

default-character-set=utf8

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

port = 3306

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

character-set-server=utf8

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

no-auto-rehash

default-character-set=utf8

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

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。

由于本人经验有限,文章中难免会有错误,请浏览文章的您指正或有不同的观点共同探讨!

随机推荐

Struts2(三):新建Struts2工程

下载的struts2xx-all.zip包对搭建项目的作用 一般情况下,我们下载一个Struts2的full包时,并不知道新建过程中需要哪些包,那么这时我们可以从下载的包中解压出的目录\apps\st ...

IDEA插件开发基础

由于简易ORM的需要,想要做一些代码自动生成功能(通过右键菜单辅助) 半自动编写代码,故考虑需要开发IDE插件(我司现使用IDEA) 1.例子代码http://confluence.jetbrains ...

Webx之表单验证

引入服务器端表单验证service,是通过在webx.xml中通过服务引入的方式完成的.例如,在user相关信息的表单验证的产生过程是这样的:webx-user.xml通过

C++ 包含头文件 和 宏的使用 和 条件编译

1 #define命令剖析 1.1   #define的概念     #define命令是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本. ...

Eclipse 主题

Eclipse开发环境默认都是白底黑字的,看到同事的Xcode中设置的黑灰色背景挺好看的,就去网络上查了一下.发现Eclipse也可以设置主题. http://eclipsecolorthemes.o ...

JAVA学习资源分享

JAVA学习资源分享 最高端的JAVA架构师资源(来自龙果学院 价值¥1399元).JAVA互联网分布式架构(龙果学院 价值¥899元).Spring Boot(2017年最新 包括源码原理分析) + ...

配置https and http2 local本地开发环境

今天,几乎所有你访问的网站都是受HTTPS保护的.如果你还没有这样做,是时候这样做了.使用HTTPS保护您的服务器也就意味着您无法从非HTTPS的服务器发送请求到此服务器.这对使用本地开发环境的开发人 ...

C# skip 重试执行代码段

var retryTimes = 5; //重试次数 int times = 0;  skip:              //代码段开始 //处理逻辑 var result=false ;   // ...

Quick 3.3 final 加载ccs的变化

1,用self._topUIWidget = ccs.GUIReader:getInstance():widgetFromJsonFile("mapTopUI.json")就还是用 ...

C语言 (内存) 四道经典题目

void GetMemory(char *p) { p = (); "没有释放内存" } void Test(void) { char *str = NULL; GetMemory ...

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值