Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 同时实现二进制和排序的属性_Sql_Mysql - Fatal编程技术网

Sql 同时实现二进制和排序的属性

Sql 同时实现二进制和排序的属性,sql,mysql,Sql,Mysql,我的数据库中有一个varchar字段,用于两种截然不同的事情。在一个场景中,我使用它进行区分大小写的评估,以确保没有插入重复项。为了实现这一点,我将比较设置为二进制。但是,我希望能够在相同的列值上不敏感地搜索大小写。有什么方法可以做到这一点,而不必简单地创建具有排序规则而不是二进制的冗余列?您可以使用COLLATE语句更改查询中某列的排序规则。有关详细示例,请参见 CREATE TABLE t_search (value VARCHAR(50) NOT NULL COLLATE UTF8_BIN

我的数据库中有一个varchar字段,用于两种截然不同的事情。在一个场景中,我使用它进行区分大小写的评估,以确保没有插入重复项。为了实现这一点,我将比较设置为二进制。但是,我希望能够在相同的列值上不敏感地搜索大小写。有什么方法可以做到这一点,而不必简单地创建具有排序规则而不是二进制的冗余列?

您可以使用COLLATE语句更改查询中某列的排序规则。有关详细示例,请参见

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
上的索引将不用于搜索,并且查询中的条件将不可搜索

如果您需要在不区分大小写的搜索中获得良好的性能,那么应该创建一个具有不区分大小写排序规则的附加列,为其编制索引并在搜索中使用