JDBC查询条件中包含中文,无查询结果(编码问题)

JDBC查询条件中包含中文,无查询结果(编码问题)

mysql:
Variable_name Value
character_set_client gbk
character_set_connection gbk
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system utf8

jdbc指定编码:gb2312

问题描述:
查询条件:where name='关税'
client 查询结果:正常显示
jdbc 查询结果:无显示

已解决:
jdbc和client的角色都是客户端,'关税'分别作为gbk ,gb2312进行了查询。jdbc指定了utf8。
jdbc在连接时,指定编码应该和client保持一致。

实践得出的结论:
my.ini文件需要进行以下配置
[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
client和server都会读取这个文件,[client]以下的参数是由客户端读取,不用重启服务,重新打开客户端便会生效
[mysqld]以下的参数由服务端读取,重启服务后生效。
以上配置用来设置character_set_client character_set_connection character_set_server都为utf8.

以下援引其他博文:

    2.mysql数据库的编码,原则上默认的编码是mysql安装的默认编码,也可以在建库时用语句来执行:create databasedbname default character set utf8;
    3.mysql数据表的编码,原则上默认是第二步建立的数据库的编码。提倡不要在creat table时加上编码
    4.利用程序建立mysql连接时,连接字符串使用的编码。如jdbc,这个地方必须是与你页面的编码一致。
    5.WEB程序页面的编码,charset=utf8;与4必须一致。
  除上面5个地方外,另有一个不是编码者所能控制的,那就是浏览用户的浏览器的编码,一般是自动选择,就不列入了。
  

上述五个地方,我所知道的保证不出现乱码的方法是:

2,3比较重要,我所理解的必须是一致。建议是在建库语句时带上编码,建表时就不指定编码了。
4是必须的
5在WEB页面中必须设置成上面的统一的编码。

请不要结束,继续往下看:上述方法中必须统一是统一的编码,我使用的是utf8,为什么使用utf8是我正要说的。
备注说明

  1、统一使用GBK编码的话,大多数时候是不会出问题。但是如果遇到·这种字符,这个字段后的所有汉字都回出现乱码。这在oracle中同样存在。因为mysql,oracle的默认编码似乎都是(mysql-latin1亦是)iso-8559-1,对某些特殊字符会出现乱码。因此建议使用utf8。utf8有利于建设网站的其它版本,比如英文版...,而且设置似乎也没有丝毫麻烦。。

参见:http://blog.csdn.net/twosecon...

未解决的:
1.关于mysql字符集的问题,以及character_set_client character_set_connection character_set_server character_set_system,还要研究:
http://dev.mysql.com/doc/refm...
http://dev.mysql.com/doc/refm...
http://www.th7.cn/db/mysql/20...
还有印象笔记

2.了解字符集
这里jdbc指定了utf8,而client是gbk,也是对的。

猜你喜欢

转载自blog.csdn.net/qq_30509055/article/details/81778873