如何在数据库中保存特殊字符

时间:2015-02-06 08:31:35

标签: java mysql database jdbc

我正在使用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ë时,它在数据库中以奇怪的方式保存,ë未保存。我该如何解决这个问题?

编辑:

我刚刚通过以下方式更改了表格:

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

但是当我添加一个新的时,它仍未在网页上正确显示。

1 个答案:

答案 0 :(得分:1)

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

数据库级

这是通过创建它获得的:

CREATE DATABASE 'db' CHARACTER SET 'utf8';

表级

所有表格也需要采用UTF-8(对您而言似乎也是如此)

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

重要的部分是 DEFAULT CHARSET = utf8 COLLATE = utf8_general_ci

最后,如果您的代码没有正确处理utf8,您可以通过在启动时更改设置来强制您的JVM使用utf8编码:

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

或更改环境变量

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

或以编程方式使用:

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

(由于JVM在启动时缓存默认字符编码的值,因此最后一个可能没有预期效果)

希望有所帮助。