我正在使用 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);
将“属性”列作为表上唯一的主键会导致...
Error Code: 1062 : Duplicate entry 'brown-sequard' for key 'PRIMARY'
此外,在发出第一个重音插入后,对非重音版本进行查询,例如:
select * from `mytable`.`attributes` where attribute='brown-sequard';
将返回重音版本 'brown-séquard。
如何确保 MySQL 识别重音字符和非重音字符在主键约束方面的区别?
更新 1
我尝试了在 StackOverflow 帖子中找到的解决方案:
那就是我添加了参数
&useUnicode=true&characterEncoding=UTF-8
到我的 JDBC 连接字符串。这没有帮助:-(
更新 2
当我从命令行 mysql 客户端而不是 MySQL Workbench 运行带有重音 "e" '(brown-séquard') 的插入命令时,我收到以下有趣的错误代码:
ERROR 1366 (HY000): Incorrect string value: '\x82quard' for column 'attribute' at row 1
但我怀疑它更多地与 windows 命令 shell/CLI 客户端阻塞重音编码而不是数据库连接本身有关。