当前位置: 首页 > 知识库问答 >
问题:

Java-使用PreparedStatement在mysql数据库中存储UTF-8字符(特别是俄语字符)

仲涵亮
2023-03-14
INSERT INTO utf8Table VALUES('Анатолий Солоницын');

然后,我就可以查询该表并返回所需字符串。

连接是通过Tomcat的context.xml文件中的资源设置的,配置如下:

<Resource 
    name="jdbc/DoolliDB"  
        auth="Container"   
        type="javax.sql.DataSource"   
        driverClassName="com.mysql.jdbc.Driver"
        useUnicode="true"
        characterEncoding="UTF8"
        ....
</Resource>

正如我所说的,我能够很好地读取字符串/字符,因此我假设表和连接设置都设置正确。

CallableStatement callableStmt = __mySqlConnector.getConnection().prepareCall("INSERT INTO utf8Table VALUES(?)");

callableStmt.setString(1, "Анатолий Солоницын");

callableStmt.executeUpdate();
System.getProperty("file.encoding") 
java.nio.charset.Charset.defaultCharset().name() 

也都返回UTF-8。

感谢任何帮助。谢谢

共有1个答案

燕正德
2023-03-14

您需要在数据库url中定义连接编码,而不是在属性中定义连接编码。

<Resource 
    name="jdbc/DoolliDB"  
        auth="Container"   
        type="javax.sql.DataSource"   
        driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://localhost:3306/dbName?characterEncoding=UTF-8"
        ...
</Resource>

请参阅http://dev.mysql.com/doc/refman/4.1/en/connector-j-reference-charsets.html

警告不要用连接器/J发出“set names”查询,因为驱动程序不会检测到字符集已更改,并将继续使用在初始连接设置期间检测到的字符集。

 类似资料:
  • 问题内容: 我有一个准备好的声明: 在我的代码中,我尝试使用st.setString方法。 userName的值为şakça。setString方法将’şakça’更改为’?akça’。它不能识别UTF-8字符。我怎么解决这个问题? 谢谢。 问题答案: 实际上,解决这些问题的方法数量非常可观。如果您使用的是MySQL,请尝试在JDBC连接URL的末尾添加一个参数: 您还应该检查表/列字符集是否为U

  • 我需要添加用户名从Facebook到数据库,这些名称有UTF-8字符,如 (ą,č,ę,ė,į,š,ų,ū).当我把它添加到数据库中,例如字母看起来像

  • 问题内容: 由于某些奇怪的原因,我似乎无法将UTF-8数据添加到我的MySQL数据库中。输入非拉丁字符时,将其存储为?????。其他所有东西都存储良好。因此,例如,“ this is aexample®™”可以很好地存储,而“和英辞典”则存储为“ ????”。 连接网址很好: 正如您所料,我正在使用PreparedStatement,甚至有人尝试输入“ set names utf8”。 该表本身似

  • 问题内容: 我有一个webapp,它在MySQL数据库中存储法语文本(可能包含重音字符)。通过PHP直接检索数据时,带重音的字符变得乱码。例如: 因此,我使用(或)将字符串转换为html实体,一切都很好。但是,当我输出包含重音字符和HTML元素的数据时,事情变得更加复杂。例如,被转换为浏览器,因此浏览器无法理解。 如何同时正确显示重音字符和正确解析HTML? 谢谢! 问题答案: 也许你可以看看和

  • 1366字符串值不正确:“\XF0\X9F\X98\X83\XF0\X9F..."第1行的“comment”列

  • null DB cfg获取 DB2数据库区域设置配置 语句正确执行,并且数据库中的行正确显示: null null 我认为这可能是一些编码问题在客户端,或服务器由于配置,文件或sql编码。 更新: 我还尝试用SQL加载一个UTF-8文件。文件正确加载,使用UTF-8字符调试SQL也正确传递给语句,但结果是相同的。 但在数据库中,测试显示为: 十六进制表示: 我认为DB2 Java客户机可能使用所有