【问题标题】:Can't insert Cyrillic symbols into MySQL with JDBC无法使用 JDBC 将西里尔符号插入 MySQL
【发布时间】:2014-08-29 12:06:17
【问题描述】:

我有一个使用 com.mysql.jdbc.Driver 连接到 MySQL 数据库的网络应用程序。 这里是 jdbcMySQL.properties:

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/dbname?characterEncoding=UTF-8
jdbc.username=....
jdbc.password=....

my.cnf has these settings:

[client]
port            = 3306
socket          = /var/run/mysqld/mysqld.sock
default-character-set = utf8

[mysqld_safe]
socket          = /var/run/mysqld/mysqld.sock
nice            = 0

[mysqld]
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp
lc-messages-dir = /usr/share/mysql
default-character-set = utf8
skip-external-locking

我这样创建数据库:

CREATE DATABASE dbname CHARACTER SET utf8 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT COLLATE utf8_general_ci;

CREATE TABLE tblname (
    `login` VARCHAR(50) NOT NULL,
    `description` TEXT
) DEFAULT CHARACTER SET utf8 COLLATE=utf8_general_ci ROW_FORMAT=DYNAMIC;

问题是:如果我做

insert into tblname (login, description) VALUES ('qwe', 'йцукен');

那么我的桌子上有

| qwe |  йцукен |

但是,如果我这样做:

jdbcTemplate.update("INSERT INTO work_time (login, date_time) VALUES (?, ?);", 
    new PreparedStatementSetter() {
    @Override
    public void setValues(PreparedStatement ps) throws SQLException {
          ps.setString(1, "qwe");
          ps.setString(4, "йцукен");
       }
    }
);

我的桌子上有:

qwe | ??????

【问题讨论】:

  • 在 url 中尝试使用Unicode = true
  • 您使用什么编辑器或 IDE 来编辑您的 Java 源代码?您需要正确设置Java源编码(大多数情况下,这里最好的选择也是UTF-8)

标签: java mysql sql jdbc


【解决方案1】:

MySQL 有点疯狂。编码,试试:

jdbc.url=jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=utf-8

此外,还有一个可能的错误原因:检查编辑器编码是否与 javac 编译器编码相同。如果它们不同,您会看到与编译的不同。

您可以尝试使用 u-escaped 版本进行测试,或者查看项目设置:

"\u0439\u0446\u0432\u043a\u0435\u043d"

【讨论】:

    猜你喜欢
    • 2018-12-31
    • 2015-06-02
    • 2018-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    • 2016-05-10
    相关资源
    最近更新 更多