据我所知 LIKE 运算符应该不区分大小写,但是如果我有字符串“ABC Software”并且我得到以下查询:
SELECT ...
FROM ...
WHERE ... LIKE 'AbC Softwa%'
我得到一个零行结果集(如果我将第二个字母 b 大写,我得到正确的结果)。为什么?以前我有 *utf8_bin* 作为字符编码,所以我切换到 *latin_swedish_ci*,假设二进制匹配是所有错误的根源,但我遇到了同样的问题。
据我所知 LIKE 运算符应该不区分大小写,但是如果我有字符串“ABC Software”并且我得到以下查询:
SELECT ...
FROM ...
WHERE ... LIKE 'AbC Softwa%'
我得到一个零行结果集(如果我将第二个字母 b 大写,我得到正确的结果)。为什么?以前我有 *utf8_bin* 作为字符编码,所以我切换到 *latin_swedish_ci*,假设二进制匹配是所有错误的根源,但我遇到了同样的问题。
尝试
SELECT ...
FROM ...
WHERE UPPER(...) LIKE 'ABC SOFTWA%'
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
数据库的名称在哪里。