我的数据库中有一个varchar字段,用于两个截然不同的事情。在一种情况下,我使用它来区分大小写,以确保不会插入重复项。为实现这一点,我将比较设置为二进制。但是,我希望能够在相同的列值上不区分大小写地搜索。有没有什么办法可以做到这一点,而不是简单地创建一个带有整理而不是二进制的冗余列?
答案 0 :(得分:2)
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
的任何内容都具有最低的强制性。
这意味着value
为了比较目的而转换为UTF8_GENERAL_CI
,而不是反过来,这意味着value
上的索引不会用于搜索并且查询中的条件不会是可以理解的。
如果您在不区分大小写的搜索方面需要良好的性能,则应创建一个不区分大小写的排序规则的附加列,将其编入索引并在搜索中使用。
答案 1 :(得分:0)
您可以使用COLLATE语句更改查询中列的排序规则。有关广泛的示例,请参阅this manual page。