一、问题描述
另外一个系统调用服务接口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%';
解决问题的方法就很明了了,将接口api进行UTF-8编码就可以解决此问题。
我们知道Windows系统默认的编码格式GBK,Linux系统默认的编码格式UTF-8。
三、MYSQL字符集修改
UTF-8 ——支持几乎所有字符
GB2312 ——是简体中文的码
GBK ——支持简体中文及繁体中文中的任何一个。
MySQL对于字符集的指定可以细化到一个数据库、一张表、一列(字段),应该用什么字符集。
在create语句中通过添加character set 参数指定相应的字符集,如果不指定,则会默认使用其上一个层级的字符集。
我们可以通过修改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 ...