gpt4 book ai didi

mysql - 区分大小写的唯一性和不区分大小写的搜索

转载 作者:可可西里 更新时间:2023-11-01 06:30:39 26 4
gpt4 key购买 nike

我有一个表,其中的字段 a 使用编码 utf8 和排序规则 utf8_unicode_ci:

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 中为索引设置排序规则。

此问题的解决方案包括插入前的唯一性检查或触发器。两者都远不如使用唯一索引优雅。

最佳答案

好吧,有两种方法可以做到这一点:

  1. 使用 _bin 排序规则
  2. 将您的数据类型更改为 VARBINARY

案例一:使用_bin整理

按如下方式创建表格:

CREATE TABLE `dictionary` (
`a` VARCHAR(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
UNIQUE KEY `idx_un_a` (`a`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

请注意:

  1. a列的数据类型
  2. a 上的 UNIQUE 索引

案例 2:使用 VARBINARY 数据类型

按如下方式创建表格:

CREATE TABLE `dictionary` (
`a` VARBINARY(128) NOT NULL,
UNIQUE KEY `idx_uniq_a` (`a`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

请注意:

  1. 新数据类型 VARBINARY
  2. a 上的 UNIQUE 索引

所以,以上两者都将解决您的目的。也就是说,它们都将允许使用“abc”、“Abc”、“ABC”、“aBc”等值,但如果大小写匹配则不允许再次使用相同的值。

请注意,提供“_bin”排序规则与使用二进制数据类型不同。所以请随时引用以下链接:

  1. The BINARY and VARBINARY datatypes
  2. The _bin and binary Collations

希望以上内容对您有所帮助!

关于mysql - 区分大小写的唯一性和不区分大小写的搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8702424/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com