mysql字符编码

时间:2011-11-19 20:10:52

标签: java mysql utf-8 character-encoding

我有一台具有以下设置的MySQL服务器:

character_set_client    utf8
character_set_connection    utf8
character_set_database  utf8
character_set_filesystem    binary
character_set_results   utf8
character_set_server    latin1
character_set_system    utf8

我有一个Java客户端,使用带有此配置的DBCP连接到此数据库:

 <bean id="dsJoomla" class="hu.eutrust.wsfresh.CustomDataSource">
        <property name="driverClassName" value="${joomla.db.driver}"/>
        <property name="username" value="${joomla.db.user}"/>
        <property name="password" value="${joomla.db.pass}"/>
        <property name="url" value="${joomla.db.url}"/>
        <property name="connectionProperties" value="characterEncoding=UTF-8;useUnicode=true;"/>
    </bean>

然后我在代码中执行某个更新,如下所示:

template.update("insert into test (nev) values (:nev)", new MapSqlParameterSource("nev", "Árvíztűrő"));

在phpMyAdmin中检查结果后,我看到一行:

ID  NEV
2 Árvízt?r?

不在latin1集中的ő和ű字符很糟糕。我想这是因为character_set_server是latin1。但是使用phpMyAdmin我可以手动编辑记录并输入'Árvíztűrő',之后记录是正确的。所以我想可以使用这些设置将所需的值输入数据库。如何使用Java客户端执行此操作?我该如何配置连接?如果连接100%utf8,我的ő和ű字符为什么会出错?

show create table test output是:

CREATE TABLE `test` (
 `ID` int(11) NOT NULL AUTO_INCREMENT,
 `NEV` varchar(64) NOT NULL,
 PRIMARY KEY (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8

show create database joomla output是:

CREATE DATABASE `joomla` /*!40100 DEFAULT CHARACTER SET utf8 */

2 个答案:

答案 0 :(得分:1)

通过DBCP连接池bean设置的连接属性不会被视为将它们附加到JDBC URL。

所以最后将?characterEncoding=UTF-8&useUnicode=true附加到连接网址帮助了我。

答案 1 :(得分:-1)

如果你正在使用Eclipe,你是否检查了你的编码:

  • 窗口 - &gt;偏好 - &gt;一般 - &gt;工作区
  • 右键点击项目 - &gt; property - &gt;资源

将其更改为UTF-8可能有所帮助。

祝你好运!