网上的方法都试了,mysql把gbk改成了utf8成功了,但是navicat那里还是死活不变,后台读的中文也乱码,求大神解决,愿送上所有分数
4 个解决方案
#1
在mysql命令行中,先选中数据库,比如use test
然后执行charset utf8 (没有-)
然后查询已经存入的表中的汉字记录。看看有没有乱码,如果没有乱码说明存入数据库的就是utf8
如果是乱码,就不乱的切换编码(charset gbk, charset gb2312.....),直到select显示的结果不现乱码,
假如你设置charset gbk后,select 的汉字不是乱码,说明你的数据库中已经存了gbk的汉字了,那没办法,数据库中的数据只能删除了重新录入。
要充分理解mysql字符集有很多环节的概念,最重要的3个:
database:就是数据库内部存储字符串用的编码
connect :就是通过socket与mysql通信时的网络编码;
client:mysql命令终端和navicat都属于客户端,后台那个mysql进程才属于服务端(server);
以上3个字符集必须都一样。如果database和connect都是utf8,而client是gbk,那么你再通过utf8的编码去select出来,肯定是乱码。
而你create table时指定了utf8,而windows下的mysql client默认是gbk,这样是很有可能出你那个问题的。
然后执行charset utf8 (没有-)
然后查询已经存入的表中的汉字记录。看看有没有乱码,如果没有乱码说明存入数据库的就是utf8
如果是乱码,就不乱的切换编码(charset gbk, charset gb2312.....),直到select显示的结果不现乱码,
假如你设置charset gbk后,select 的汉字不是乱码,说明你的数据库中已经存了gbk的汉字了,那没办法,数据库中的数据只能删除了重新录入。
要充分理解mysql字符集有很多环节的概念,最重要的3个:
database:就是数据库内部存储字符串用的编码
connect :就是通过socket与mysql通信时的网络编码;
client:mysql命令终端和navicat都属于客户端,后台那个mysql进程才属于服务端(server);
以上3个字符集必须都一样。如果database和connect都是utf8,而client是gbk,那么你再通过utf8的编码去select出来,肯定是乱码。
而你create table时指定了utf8,而windows下的mysql client默认是gbk,这样是很有可能出你那个问题的。
#2
根据你另一个贴子的情况。
初步判断:你最早的jsp是ISO-8859-1,数据库是utf8,然后通过jsp录入数据,结果查询发现乱码,又把jsp改为uft8,发现还是乱码。
其次一旦用不正确的编码将数据录入的数据库,那么再怎么调整,也得不到想要的编码了。没有办法,只能把数据删了重新导入。
#3
在后台查询的时候在设置下UTF-8编码试试
我后台重新设置个了编码String name =new String(listUser.get(0).getUsername().getBytes("ISO-8859-1"),"utf-8");例如这样,读取出来之后能转回中文,但是jsp那边一样是乱码,页面也设置了utf-8了,而且,我不可能是每个方法数据都这样转,所以问题不在这里,java和jsp文件都设置了utf-8默认编码
根据你另一个贴子的情况。
初步判断:你最早的jsp是ISO-8859-1,数据库是utf8,然后通过jsp录入数据,结果查询发现乱码,又把jsp改为uft8,发现还是乱码。
其次一旦用不正确的编码将数据录入的数据库,那么再怎么调整,也得不到想要的编码了。没有办法,只能把数据删了重新导入。
大神,我把数据库和navicat都卸载了重装,数据库也完全删除了,我把编码格式全部都设置了utf-8,再在navicat那边录入数据,数据格式也是utf8,但是情况没有改善,返回来的还是乱码,我在navicat那边查编码却和mysql不一样,不知道为啥。。
#4
你私信我,我给你远程看看。
#1
在mysql命令行中,先选中数据库,比如use test
然后执行charset utf8 (没有-)
然后查询已经存入的表中的汉字记录。看看有没有乱码,如果没有乱码说明存入数据库的就是utf8
如果是乱码,就不乱的切换编码(charset gbk, charset gb2312.....),直到select显示的结果不现乱码,
假如你设置charset gbk后,select 的汉字不是乱码,说明你的数据库中已经存了gbk的汉字了,那没办法,数据库中的数据只能删除了重新录入。
要充分理解mysql字符集有很多环节的概念,最重要的3个:
database:就是数据库内部存储字符串用的编码
connect :就是通过socket与mysql通信时的网络编码;
client:mysql命令终端和navicat都属于客户端,后台那个mysql进程才属于服务端(server);
以上3个字符集必须都一样。如果database和connect都是utf8,而client是gbk,那么你再通过utf8的编码去select出来,肯定是乱码。
而你create table时指定了utf8,而windows下的mysql client默认是gbk,这样是很有可能出你那个问题的。
然后执行charset utf8 (没有-)
然后查询已经存入的表中的汉字记录。看看有没有乱码,如果没有乱码说明存入数据库的就是utf8
如果是乱码,就不乱的切换编码(charset gbk, charset gb2312.....),直到select显示的结果不现乱码,
假如你设置charset gbk后,select 的汉字不是乱码,说明你的数据库中已经存了gbk的汉字了,那没办法,数据库中的数据只能删除了重新录入。
要充分理解mysql字符集有很多环节的概念,最重要的3个:
database:就是数据库内部存储字符串用的编码
connect :就是通过socket与mysql通信时的网络编码;
client:mysql命令终端和navicat都属于客户端,后台那个mysql进程才属于服务端(server);
以上3个字符集必须都一样。如果database和connect都是utf8,而client是gbk,那么你再通过utf8的编码去select出来,肯定是乱码。
而你create table时指定了utf8,而windows下的mysql client默认是gbk,这样是很有可能出你那个问题的。
#2
在后台查询的时候在设置下UTF-8编码试试
我后台重新设置个了编码String name =new String(listUser.get(0).getUsername().getBytes("ISO-8859-1"),"utf-8");例如这样,读取出来之后能转回中文,但是jsp那边一样是乱码,页面也设置了utf-8了,而且,我不可能是每个方法数据都这样转,所以问题不在这里,java和jsp文件都设置了utf-8默认编码
根据你另一个贴子的情况。
初步判断:你最早的jsp是ISO-8859-1,数据库是utf8,然后通过jsp录入数据,结果查询发现乱码,又把jsp改为uft8,发现还是乱码。
其次一旦用不正确的编码将数据录入的数据库,那么再怎么调整,也得不到想要的编码了。没有办法,只能把数据删了重新导入。
#3
在后台查询的时候在设置下UTF-8编码试试
我后台重新设置个了编码String name =new String(listUser.get(0).getUsername().getBytes("ISO-8859-1"),"utf-8");例如这样,读取出来之后能转回中文,但是jsp那边一样是乱码,页面也设置了utf-8了,而且,我不可能是每个方法数据都这样转,所以问题不在这里,java和jsp文件都设置了utf-8默认编码
根据你另一个贴子的情况。
初步判断:你最早的jsp是ISO-8859-1,数据库是utf8,然后通过jsp录入数据,结果查询发现乱码,又把jsp改为uft8,发现还是乱码。
其次一旦用不正确的编码将数据录入的数据库,那么再怎么调整,也得不到想要的编码了。没有办法,只能把数据删了重新导入。
大神,我把数据库和navicat都卸载了重装,数据库也完全删除了,我把编码格式全部都设置了utf-8,再在navicat那边录入数据,数据格式也是utf8,但是情况没有改善,返回来的还是乱码,我在navicat那边查编码却和mysql不一样,不知道为啥。。
#4
你私信我,我给你远程看看。