装了一个mysql4.1以后,竟然发现中文问题了。哎,已经好久没有被中文问题困扰了,没想到今天却被这个问题折腾了一个多小时。
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
首先有必要说明的是,你的驱动需要更新到 mysql-connector-java-<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /><chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899">3.0.16</chsdate>或以上版本,否则不支持mysql4.1。
JDBC URL:"jdbc:mysql://jf:3306/learning?useUnicode=true&characterEncoding=GBK" 在4.0版本解释中文没有任何问题,但是在4.1中就不起任何作用,中文依旧乱码。
刚开始以为gbk不支持,那么就更换成utf-8测试一下,结果还是不行。查阅参阅了http://dev.mysql.com/doc/connector/j/en/index.html 文档,发现白费了功夫:
UsingtheUTF-8CharacterEncoding-PriortoMySQLserverversion4.1,theUTF-8characterencodingwasnotsupportedbytheserver,howevertheJDBCdrivercoulduseit,allowingstorageofmultiplecharactersetsinlatin1tablesontheserver.
查阅 http://dev.mysql.com/doc/connector/j/en/cj-character-sets.html 文档,发现latin1默认是 iso8859_1的字符编码。
但是从数据库检索出来后用转码,从iso8859_1转为GBK也是无效。
后来搜索了在网上搜索了一下,发现有介绍修改 mysql的 my.ini文件,将my.ini 中的 [mysqld] 里添加一行:default-character-set=gbk,然后重起mysql。这个方法因为设计到需要重新启动mysql,没有测试。不知道是否可行。
但是发现用ems mysql创建表的sql中多了default charset属性。默认为latin1。
| CREATE TABLE `tmp_4` ( `id` tinyint(4) NOT NULL auto_increment, `a` char(1) default NULL, PRIMARY KEY (`id`), UNIQUE KEY `id` (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
于是将sql更改为 DEFAULT CHARSET=gbk ,重新创建了表。中文问题就这么解决了。不过唯一不好的就是,在mysql中存储的是???之类的字符,无法通过控制台进行查看修改。这个问题目前我还没有找到好的方式,不知道以上修改my.ini的方式是否可行,大家可以测试一下。
博主安装 MySQL 4.1 后遇到中文问题,尝试多种方法解决。如更新驱动到 mysql - connector - java - 3.0.16 或以上,修改 JDBC URL 字符编码,查阅文档等均无效。最终通过将创建表的 SQL 中字符集改为 gbk 解决,但存储字符在控制台查看修改有问题。
549

被折叠的 条评论
为什么被折叠?



