在使用mysql进行搜索时,如何忽略大小写之间的区别

时间:2010-06-30 15:32:54

标签: mysql

使用mysql

搜索时,如何忽略大写和小写之间的区别

6 个答案:

答案 0 :(得分:26)

做这样的事情:

SELECT user 
FROM users 
WHERE UPPER( user ) = UPPER( 'moustafa' );

基本上,您将结果转换为一个案例并与搜索字词进行比较,后者也会转换为大写字母,实际上会忽略大小写。

答案 1 :(得分:17)

可以使用UPPERLOWER函数,但您也可以通过选择合适的归类和/或列类型来影响区分大小写。

例如,latin1_general_csVARCHARVARBINARY区分大小写:

DROP TABLE IF EXISTS `case_sensitive`;
CREATE TABLE `case_sensitive` (
    `id` INT NOT NULL AUTO_INCREMENT,
    `nonbinary` VARCHAR(255),
    `binary`  VARBINARY(255),
    PRIMARY KEY (`id`)
) ENGINE=InnoDB COLLATE latin1_general_cs;

INSERT INTO `case_sensitive` (`nonbinary`, `binary`) VALUES ('A', 'A');

SELECT * FROM `case_sensitive` WHERE `nonbinary` = 'A';

+----+-----------+--------+
| id | nonbinary | binary |
+----+-----------+--------+
|  1 | A         | A      |
+----+-----------+--------+
1 row in set (0.00 sec)

SELECT * FROM `case_sensitive` WHERE `binary` = 'A';

+----+-----------+--------+
| id | nonbinary | binary |
+----+-----------+--------+
|  1 | A         | A      |
+----+-----------+--------+
1 row in set (0.00 sec)

SELECT * FROM `case_sensitive` WHERE `nonbinary` = 'a';

Empty set (0.00 sec)

SELECT * FROM `case_sensitive` WHERE `binary` = 'a';

Empty set (0.00 sec)

latin1_general_ciVARCHAR不区分大小写,而VARBINARY区分大小写:

DROP TABLE IF EXISTS `case_insensitive`;
CREATE TABLE `case_insensitive` (
    `id` INT NOT NULL AUTO_INCREMENT,
    `nonbinary` VARCHAR(255),
    `binary`  VARBINARY(255),
    PRIMARY KEY (`id`)
) ENGINE=InnoDB COLLATE latin1_general_ci;

INSERT INTO `case_insensitive` (`nonbinary`, `binary`) VALUES ('A', 'A');

SELECT * FROM `case_insensitive` WHERE `nonbinary` = 'A';

+----+-----------+--------+
| id | nonbinary | binary |
+----+-----------+--------+
|  1 | A         | A      |
+----+-----------+--------+
1 row in set (0.00 sec)

SELECT * FROM `case_insensitive` WHERE `binary` = 'A';

+----+-----------+--------+
| id | nonbinary | binary |
+----+-----------+--------+
|  1 | A         | A      |
+----+-----------+--------+

SELECT * FROM `case_insensitive` WHERE `nonbinary` = 'a';

+----+-----------+--------+
| id | nonbinary | binary |
+----+-----------+--------+
|  1 | A         | A      |
+----+-----------+--------+

SELECT * FROM `case_insensitive` WHERE `binary` = 'a';

Empty set (0.00 sec)

因此,您应该选择最适合您需求的排序规则和列类型。您可以在此处找到更多信息:

字符串搜索中的大小写敏感度
http://dev.mysql.com/doc/refman/5.1/en/case-sensitivity.html

MySQL中的字符集和排序 http://dev.mysql.com/doc/refman/5.1/en/charset-mysql.html

MySQL支持的字符集和排序 http://dev.mysql.com/doc/refman/5.1/en/charset-charsets.html

答案 2 :(得分:6)

通常,您应该使用WHERE UPPER(COLUMNNAME)= UPPER('valuetocompare')。

或者,如果你想进行子字符串搜索,你可以使用像UPPER('%valuetocompare%')这样的WHERE UPPER(COLUMNNAME)

答案 3 :(得分:2)

我在你搜索的列上使用utf8_unicode_(CI)不区分大小写的整理....它的工作原理

答案 4 :(得分:1)

您可以将数据以小写形式存储在mySQL中,只需对其执行查询。

答案 5 :(得分:0)

SELECT * FROM table_name WHERE column_name1 LIKE '%A%' OR column_name1 LIKE '%a%';