云服务器mysql中文乱码问题解决

一 问题描述

在本地开发的程序部署都腾讯云上后添加中文到数据库乱码,并且查询到网页的内容也是乱码。

二 分析原因

先添加了一条数据然后debug,发现在插入数据库前中文都是正常的,然后执行数据操作后就乱码了,然后又在linux系统中insert数据发现中文也是乱码,所以有可能是程序中执行插入的时候数据编码格式不一致导致的。

三 解决方法

先按照网上提供的修改linux系统中mysql的配置文件my.cnf的方式对[mysql] [mysqld] [client] 甚至[mysql.server]进行了编码设置。但是无奈不管怎么写,再查询show variable like '%character%'的时候,character_set_server和character_set_databse的编码格式依然为latain1。这样折腾了几天,然后突然想到是不是可以在程序里强制转换编码格式为utf8,所以在数据库连接代码中添加了如下语句:

jdbc.url=jdbc:mysql://110.14.20.24:3306/Test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull

再进行测试,问题完美解决,中文显示再也不是讨厌的问号了。撒花~

四 为什么是这样解决的?

添加上面的语句就起作用了,虽然查询mysql的编码格式时还是latain1。我只是个java新手,自己想了想原理应该是:

当添加数据时,强制把web端的编码格式转换为utf8,然后数据库收到后又将utf8的编码格式转换成自己能存储的latain1.

查询数据的时候相反,数据库先按照latain1的格式查询出数据然后转换成程序要求的utf8格式,这样中文就可以正确显示了。

当然,理解不对请在下面评论指出,欢迎涨姿势的高质量交流。

猜你喜欢

转载自blog.csdn.net/u010176097/article/details/80078498
今日推荐