2010-06-30 56 views

回答

25

做這樣的事情的時候:

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

基本上您將結果轉換爲一種情況,並將其與轉換爲大寫的搜索詞進行比較,從而有效地忽略大小寫。

+4

+1:將評估的兩側驅動到同一個案例(UPPER或LOWER)將提供不區分大小寫的搜索。警告:如果存在索引,則在列上使用函數不會使用索引。 – 2010-06-30 15:44:01

6

通常,您應該使用WHERE UPPER(COLUMNNAME)= UPPER('valuetocompare')。

或者,您culd使用WHERE UPPER(COLUMNNAME)像UPPER(「%valuetocompare%」),如果你想要做一個字符串搜索

1

您可以存儲在MySQL中的數據更低的情況下,只是進行查詢在上面。

17

可以使用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) 

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

我在你搜索的列上使用utf8_unicode_(CI)不區分大小寫的排序....和它的工作原理

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

只有複製粘貼代碼是不夠的,你必須解釋它的作用和方式。 – peterh 2015-12-09 05:31:35

+1

@peterh同意。 – 2015-12-09 08:00:42