新人第一篇博客,今天碰到的问题网上找了些个人一点点总结,不对的地方还望各位大佬斧正。
言归正传,今天把写好的项目打成war包,放到服务器上;通过前端界面修改字段,发现修改之后中文查出来乱码了;
我的项目是springboot springMVC mybatis结构,工具idea,mysql5.7;因为之前设置过idea的全局编码、项目编码、文件编码,日志打印出来前台发送过来也是没有乱码的,于是就一直在mysql平台上找问题,哎最后真的是,唉!不说那么多了;最后我捋了捋:
我的想法,从前台到后台,最后数据库;从前往后的找法(注:我的项目个人都是utf-8)
1、排除前台js代码的问题,因为提交大部分是通过js提交的(get,post。。。);我用的是jquery 的ajax直接设置属性
scriptCharset='utf-8';这个一眼就看出来,也可以f12来看即将传入后台的值有没有乱码;
2、idea -setting-Editor-File Encodings查看代码的编码格式是不是utf-8
3、查看项目中msyql连接池配置信息是不是设置了编码格式,有时候有的不设置,有的设置了在本地感觉没区别;这个编码格式不设置,如果你的mysql的字符集里设置了服务器的字符集为utf-8,也就是和代码里一致,那也行(就是mysql的客户端,连接,服务器,结果集保持一致就可以);我的问题就是mysql数据字符集不一致但是又不能改,代码里也没有配置连接字符集编码格式;加个characterEncoding=UTF-8就行(有个小细节,后台打印日志数据是中文,听说这个日志打印出来有时候乱码,有时候好的,不能做参考原因不清楚)
4、mysql数据库,mysql数据库的字符集可以跟代码、数据库表字符集一致,但是代码和数据库表的字符集一定要一致(也就是字段里的内容编码格式要一样),数据库的字符集是默认的,彼此不一致如下:
查看服务器中数据库实际编码格式。使用root用户登陆数据库,输入:show variables like 'character%';
character_set_database 这个是数据库的编码格式这个好像改不改都影响不大,这几 者之间的关系可以网上去搜网页被我干掉了,找不到,就不放上来了;
重点是character_set_server这个东西,叫服务器端字符集,如果第三点,没在代码的配置文件设置jdbc时没加入编码格式;可以在vi /etc/my.cnf 在[mysqld]下只加入character_set_server=utf8,数据库,服务器端都会变成utf8,不用其他操作;且是永久的;这样就算不在jdbc上设置编码格式也可以,3或者4这两点取其中一点就行,否则就算其他的都没问题一样会乱码;
5、最后查看数据库表的编码格式;命令:show table status from sqlstudy_db like '%countries%'; 也可以用Navicat 工具来改好用的一匹;像数据库的字符集,表的字符集,选择数据库、表右键 database properties、Design table就行,直接修改;
我直观的感觉就是数据库里character_set_server与jdbc连接池设置编码都是用于服务端的连接编码取其一;
自己写的有一些混乱,希望能有所帮助!