2014-08-29 18 views
2

我有一個web應用程序,使用com.mysql.jdbc.Driver連接到MySQL數據庫。 這裏是jdbcMySQL.properties:不能插入cyrllic符號到MySQL與JDBC

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 | ?????? 
+0

url中嘗試了useUnicode =真 – SparkOn 2014-08-29 12:22:57

+0

你用什麼編輯器或IDE編輯您的Java源代碼?您需要正確設置Java源代碼(在大多數情況下,這裏最好的選項也是UTF-8) – 2014-08-29 12:28:04

回答

1

MySQL是一個有點瘋狂w.r.t.編碼,請嘗試:

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

此外還有一個可能的錯誤原因:檢查編輯器編碼是否與javac編譯器編碼相同。如果它們不同,你會看到與編譯不同的東西。

你可以嘗試的u轉義版本來測試,還是看在項目設置:

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