Sql 同时实现二进制和排序的属性
我的数据库中有一个varchar字段,用于两种截然不同的事情。在一个场景中,我使用它进行区分大小写的评估,以确保没有插入重复项。为了实现这一点,我将比较设置为二进制。但是,我希望能够在相同的列值上不敏感地搜索大小写。有什么方法可以做到这一点,而不必简单地创建具有排序规则而不是二进制的冗余列?您可以使用COLLATE语句更改查询中某列的排序规则。有关详细示例,请参见Sql 同时实现二进制和排序的属性,sql,mysql,Sql,Mysql,我的数据库中有一个varchar字段,用于两种截然不同的事情。在一个场景中,我使用它进行区分大小写的评估,以确保没有插入重复项。为了实现这一点,我将比较设置为二进制。但是,我希望能够在相同的列值上不敏感地搜索大小写。有什么方法可以做到这一点,而不必简单地创建具有排序规则而不是二进制的冗余列?您可以使用COLLATE语句更改查询中某列的排序规则。有关详细示例,请参见 CREATE TABLE t_search (value VARCHAR(50) NOT NULL COLLATE UTF8_BIN
CREATE TABLE t_search (value VARCHAR(50) NOT NULL COLLATE UTF8_BIN PRIMARY KEY);
INSERT
INTO t_search
VALUES ('test');
INSERT
INTO t_search
VALUES ('TEST');
SELECT *
FROM t_search
WHERE value = 'test' COLLATE UTF8_GENERAL_CI;
第二个查询将返回两行
但是,请注意,任何应用了COLLATE
的对象都具有最低的强制性
这意味着将转换为UTF8\u GENERAL\u CI
进行比较的是value
,而不是反过来,这意味着value
上的索引将不用于搜索,并且查询中的条件将不可搜索
如果您需要在不区分大小写的搜索中获得良好的性能,那么应该创建一个具有不区分大小写排序规则的附加列,为其编制索引并在搜索中使用