2015-02-06 85 views
0

我使用的是MySQL数据库和插入这样的:当我插入如何保存特殊字符在数据库

try (Connection connection = DbConnector.connectToDb(); 
      PreparedStatement stm = connection.prepareStatement("INSERT INTO Country (name) VALUES (?)")) { 
      stm.setString(1, name); 
      if (stm.executeUpdate() > 0) { 
       result = true; 
      } 
     } catch (Exception e) { 
      logStackTrace(e); 
     } 

现在:België属于它在数据库保存在一个奇怪的方式E不是保存。我该如何解决这个问题?

编辑:

我只是通过改变表:

ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci; 
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci; 

但仍当我添加一个新的没有在网页上正确显示它。

+1

在你的db,你的源代码和你的机器中使用正确的编码 – Steffen 2015-02-06 08:32:48

+0

数据库中的字段类型是什么?你如何验证在数据库调用之前你已经获得了正确的数据?你如何验证它没有正确存储?我并不是说这不是问题,但我们很难在没有更多信息的情况下提供帮助。 – 2015-02-06 08:34:42

+0

字段类型是一个字符串。我通过我的网页和mysqlworkbench进行了验证。 – user1007522 2015-02-06 08:41:36

回答

1

数据库中有2点要检查以正确设置UTF-8字符集。

数据库级

这是通过创建它获得:

CREATE DATABASE 'db' CHARACTER SET 'utf8'; 

表级

所有的表需要在UTF-8还(这似乎是你的情况)

CREATE TABLE `Table1` (
    [...] 
) DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; 

的重要组成部分,是默认字符集= UTF8 COLLATE = utf8_general_ci

最后,如果你的代码不正确处理UTF-8,你可以迫使你的JVM通过在启动时更改设置使用utf8编码:

java -Dfile.encoding=UTF-8 [...] 

,或者使用改变环境变量

"**JAVA_TOOLS_OPTIONS**" to -Dfile.encoding="UTF-8" 

或编程:

System.setProperty("file.encoding" , "UTF-8"); 

(最后一个可能没有欲望的效果,因为在JVM上的高速缓存启动时默认的字符编码的值)

希望这有助于。

+0

谢谢,我只是做了这个ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci; ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;但仍然当我添加一个新的它不好显示。我是否需要设置默认或其他? – user1007522 2015-02-06 08:39:13

+1

确保你的页面编码是相同的,并检查这个http://balusc.blogspot.in/2009/05/unicode-how-to-get-characters-right.html,这也是https://coderwall.com/p/rvduyw/jdbc-inserting-unicode-utf-8 -character-into-mysql – 2015-02-06 08:42:40

+0

谢谢你:-)这个技巧。 – user1007522 2015-02-06 10:54:24