MySQL没有区分'e'和'é'(使用JDBC)

时间:2013-02-27 18:18:48

标签: mysql jdbc primary-key

我正在使用UTF-8整理数据库,这是一个应该能够区分'e'和'é'的字符集...不幸的是从MySQL Workbench和/或JDBC发出以下2个插入直接

INSERT INTO `ucap_i10_13_02_27$12_48_41`.`attributes` (`attribute`, `intvalue`) VALUES ('brown-séquard', 1);


INSERT INTO `mytable`.`attributes` (`attribute`, `intvalue`) VALUES ('brown-sequard', 1);

将'attribute'列作为表中唯一的主键,结果为...

Error Code: 1062 : Duplicate entry 'brown-sequard' for key 'PRIMARY'

此外,在发出第一个重音插入后,对未加重音的版本进行查询,如:

select * from `mytable`.`attributes` where attribute='brown-sequard';

将返回重音版'brown-séquard。

如何确保MySQL识别主键约束的重音和非重音字符之间的区别?

更新1

我尝试了在这个StackOverflow帖子上找到的解决方案:

É vs. E in MySQL database

那就是我添加了参数

&useUnicode=true&characterEncoding=UTF-8

到我的JDBC连接字符串。这没有用: - (

更新2

当我从命令行mysql客户端而不是MySQL Workbench运行带有重音“e”'(brown-séquard')的insert命令时,我得到以下有趣的错误代码:

ERROR 1366 (HY000): Incorrect string value: '\x82quard' for column 'attribute' at row 1

但是我怀疑它更多地与windows命令shell / CLI客户端阻塞重音编码而不是数据库连接本身有关。

1 个答案:

答案 0 :(得分:1)

您遇到的内容与角色整理有关,即the way MySQL compares characters

您可以在查询中use COLLATE clause强制使用此一个查询的特定排序规则,或更改表定义中的列排序规则,以使其始终采用这种方式。