Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';t使用JDBC将西里尔字母符号插入MySQL_Java_Mysql_Sql_Jdbc - Fatal编程技术网

Java Can';t使用JDBC将西里尔字母符号插入MySQL

Java Can';t使用JDBC将西里尔字母符号插入MySQL,java,mysql,sql,jdbc,Java,Mysql,Sql,Jdbc,我有一个web应用程序,它使用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:

我有一个web应用程序,它使用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 | ??????

MySQL有点疯狂的w.r.t.编码,试试:

jdbc.url=jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=utf-8
此外,还有一个可能的错误原因:检查编辑器编码是否与javac编译器编码相同。如果它们不同,您会看到与编译内容不同的内容

您可以尝试u-escape版本来测试,或者查看项目设置:

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

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