Ada*_*san 3 java mysql jdbc collation
我查看了mysql引用,在这里,在stackoverflow中,看起来很多人都遇到了字符编码的困难,但是我找不到这个问题的明确答案:
一个java程序正在使用一个mysql数据库,当查询中有特殊字符如ű,ő(但á,é,í,ó,ú起作用)时,会抛出一个SQLException:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = DriverManager.getConnection(
"jdbc:odbc:<database>", "<user>", "<pass>"
);
PreparedStatement stmt = conn.prepareStatement(
" select username, priority " +
" from users " +
" where username like ?");
//" where username like ? collate latin2_general_ci");
stmt.setString(1, "Ern?");
ResultSet rs = stmt.executeQuery();
while(rs.next()) {
System.out.println(rs.getString("username") + " " + rs.getInt("priority"));
}
Run Code Online (Sandbox Code Playgroud)
例外:
Exception in thread "main" java.sql.SQLException:
[MySQL][ODBC 5.1 Driver][mysqld-5.1.63-0ubuntu0.10.04.1]
Illegal mix of collations (latin2_hungarian_ci,IMPLICIT)
and (latin1_swedish_ci,COERCIBLE) for operation 'like'
Run Code Online (Sandbox Code Playgroud)
表结构是:
CREATE TABLE `users` (
`username` varchar(45) COLLATE latin2_hungarian_ci NOT NULL,
`password` varchar(45) COLLATE latin2_hungarian_ci NOT NULL,
`priority` tinyint(4) NOT NULL,
`idCimlistaFK` int(10) unsigned DEFAULT NULL,
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`username`),
KEY `fk_users_tbl_Cimlista1` (`idCimlistaFK`),
CONSTRAINT `fk_users_tbl_Cimlista1` FOREIGN KEY (`idCimlistaFK`)
REFERENCES `tbl_cimlista` (`id_Cimlista`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin2 COLLATE=latin2_hungarian_ci
Run Code Online (Sandbox Code Playgroud)
当我试图像注释行中那样强制进行排序时:
" where username like ? collate latin2_general_ci");
Run Code Online (Sandbox Code Playgroud)
它也引发了一个例外:
COLLATION 'latin2_general_ci' is not valid for CHARACTER SET 'latin1'
Run Code Online (Sandbox Code Playgroud)
有谁知道,如何解决这个问题(可能在java内)?(我不想更改数据库,因为它是遗留系统.)
更新:
我按照Rahul Agrawal的建议使用了以下网址:
"jdbc:mysql://localhost:3306/database?characterEncoding=latin2"
Run Code Online (Sandbox Code Playgroud)
它确实有效,但我注意到了副作用.当我使用testserver更新并插入数据时,它在win XP机器上运行mysql,它运行良好.但是当我更新并将数据插入到运行Ubuntu的生产服务器时,我确实得到了行,这些行有?-signs而不是ő,ű-letters.我解决了这个问题,因为它可以很好地看到和理解,出了什么问题,这里有什么问题.
您需要使用UTF-8字符集
在连接URL中试试这个
jdbc:mysql://localhost:3306/testdb?characterEncoding=utf8
Run Code Online (Sandbox Code Playgroud)
数据库CHARSET = utf8
数据库整理= utf8_general_ci
| 归档时间: |
|
| 查看次数: |
9651 次 |
| 最近记录: |