【发布时间】: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)