【发布时间】:2012-01-31 21:52:50
【问题描述】:
我有一个使用编码 utf8 和排序规则 utf8_unicode_ci 的字段 a 的表:
CREATE TABLE dictionary (
a varchar(128) NOT NULL
) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
排序规则 utf8_unicode_ci 是高效的不区分大小写搜索所必需的,带有扩展和连接。为此,我有索引:
CREATE INDEX a_idx on dictionary(a);
问题:此外,我必须确保字段 a 的所有存储值都是唯一的,但以 区分大小写的方式。 德语示例:“blühen”和“Blühen”必须都存储在表中。但是第二次添加“Blühen”应该是不可能的。
MySQL 中是否有内置功能可以同时具备这两种功能?
不幸的是,在 MySQL 5.1 中似乎无法为索引设置排序规则。
此问题的解决方案包括插入前的唯一性检查或触发器。两者都远没有使用唯一索引那么优雅。
【问题讨论】:
-
不幸的是,MySQL 缺少其他 RDBMS 具有的索引/物化视图或计算列或基于函数的索引等功能。我当然有兴趣看看它是如何完成的......
-
添加另一个具有区分大小写的排序规则和唯一性约束的列对您有用吗?
-
我觉得这个话题很有帮助。 stackoverflow.com/questions/4945349/…
-
感谢您的 cmets!添加另一列将是一种选择。对于我的特定目的,我认为在任何 few 更新或插入操作之前添加唯一性检查是最好的选择。我原来的帖子是一个简化。其实我的列多,读操作多,又怕加多列会因为内存有限而成为性能问题。