2014-08-29 5 views
2

У меня есть веб-приложение, в котором используется 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

+0

Какой редактор или IDE вы используете для редактирования исходного кода Java? Вам нужно правильно установить кодировку источника Java (в большинстве случаев лучшим вариантом является также UTF-8) –

ответ

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" 
Смежные вопросы