在 MySQL 中有一个区分重音的主键。
我有一个独特的词表,所以我使用这个词本身作为主键(顺便说一下,如果有人可以给我一个建议,我不知道它是否是一个好的设计/实践)。
我需要该字段对重音(以及为什么不区分大小写)敏感,因为它必须区分,例如,'demandé'和'demande',法语动词“需求者”的两个不同屈折。我在数据库中存储重音词没有任何问题。我只是无法插入两个在无重音时相同的重音字符串。
尝试'demandé'使用以下查询创建行时:
INSERT INTO `corpus`.`token` (`name_token`) VALUES ('demandé');
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
ERROR 1062: 1062: Duplicate entry 'demandé' for key 'PRIMARY'
Run Code Online (Sandbox Code Playgroud)
解决方案 在表声明中使用“collate utf8_general_ci”
SELECT * FROM corpus.token WHERE name_token = 'demandé' COLLATE utf8_bin 解决方案 使用'collate utf8_bin'和 WHERE 语句
我发现我可以通过使用BINARY关键字来实现这一点(请参阅此sqlFiddle)。collate和 和有binary什么区别?
我可以保留其他表的任何更改吗?(反正我得重建那个表,因为它有点乱)
我对 MySQL 中的编码不太满意。我对该数据库中的编码还没有任何问题(我有点幸运,因为我的数据可能并不总是使用相同的编码......而且我无能为力)。我有一种感觉,对“重音敏感”问题的任何修改都可能会导致其他查询或数据完整性出现一些编码问题。我有必要担心吗?
数据库创建:
CREATE DATABASE corpus DEFAULT CHARACTER SET utf8;
Run Code Online (Sandbox Code Playgroud)
唯一词表: …