使用mysql
搜索时,如何忽略大写和小写之间的区别答案 0 :(得分:26)
做这样的事情:
SELECT user
FROM users
WHERE UPPER( user ) = UPPER( 'moustafa' );
基本上,您将结果转换为一个案例并与搜索字词进行比较,后者也会转换为大写字母,实际上会忽略大小写。
答案 1 :(得分:17)
可以使用UPPER
和LOWER
函数,但您也可以通过选择合适的归类和/或列类型来影响区分大小写。
例如,latin1_general_cs
与VARCHAR
和VARBINARY
区分大小写:
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_ci
对VARCHAR
不区分大小写,而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%';