0

据我所知 LIKE 运算符应该不区分大小写,但是如果我有字符串“ABC Software”并且我得到以下查询:

SELECT ...
FROM ...
WHERE ... LIKE 'AbC Softwa%'

我得到一个零行结果集(如果我将第二个字母 b 大写,我得到正确的结果)。为什么?以前我有 *utf8_bin* 作为字符编码,所以我切换到 *latin_swedish_ci*,假设二进制匹配是所有错误的根源,但我遇到了同样的问题。

4

2 回答 2

1

尝试

SELECT ...
FROM ...
WHERE UPPER(...) LIKE 'ABC SOFTWA%'
于 2012-08-02T21:42:17.973 回答
0

MySQL 默认情况下不区分大小写。

如果要执行区分大小写的搜索,请使用:

SELECT ...
FROM ...
WHERE ... LIKE BINARY 'AbC Softwa%'

如果您的数据库或表默认配置为区分大小写,那么要执行不区分大小写的搜索,您需要执行以下操作:

SELECT ...
FROM ...
WHERE ... COLLATE latin1_swedish_ci LIKE 'AbC Softwa%' COLLATE latin1_swedish_ci

如果您使用的是 utf8,请尝试以下操作:

SELECT ...
FROM ...
WHERE ... COLLATE utf8_general_ci LIKE 'AbC Softwa%' COLLATE utf8_general_ci

您可能想调查为什么您的数据库区分大小写。

要查看服务器的配置方式,请运行:

SHOW VARIABLES LIKE '%collation%';

要查看表的排序规则,请运行:

SHOW TABLE STATUS;

并查看数据库的默认排序规则:

SHOW CREATE DATABASE dbname;

dbname数据库的名称在哪里。

于 2012-08-02T21:39:58.880 回答