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

Mos*_*ady 5 mysql

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

Jas*_*Cav 27

做这样的事情:

SELECT user 
FROM users 
WHERE UPPER( user ) = UPPER( 'moustafa' );
Run Code Online (Sandbox Code Playgroud)

基本上你将你的结果转换成一个案例并与搜索词进行比较,搜索词也被转换为大写,实际上忽略了大小写.

  • +1:将评估的两侧驱动到相同的情况(UPPER或LOWER)将提供不区分大小写的搜索.警告:如果存在索引,则使用列上的函数将不会使用索引. (5认同)

Mik*_*ike 18

UPPERLOWER功能都可以使用,但也可以通过选择适当的整理和/或塔型影响区分大小写.

例如,latin1_general_cs区分大小写与两个VARCHARVARBINARY:

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)
Run Code Online (Sandbox Code Playgroud)

虽然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)
Run Code Online (Sandbox Code Playgroud)

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

字符串搜索中的大小写敏感度
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


Rod*_*ama 6

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

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