您好,登錄后才能下訂單哦!
本篇內容介紹了“Mysql如何使得字段內容不區分大小寫”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
造成存儲的時候按大小寫存儲,但是檢索的時候不區分大小寫. 這個也是在Oracle的默認情況不一致的,oracle 統一使用區分大小寫的編碼方式。所以在默認情況和oracle數據庫是有區別的。
1. 插入 'Ab', 'ab'兩條記錄
root@test 09:11:51>insert into test values(3, 'Ab');
Query OK, 1 row affected (0.01 sec)
root@test 09:12:15>insert into test values(3,'ab');
Query OK, 1 row affected (0.01 sec)
root@test 09:12:39>select * from test;
+------+------+
| id | name |
+------+------+
| 1 | aa11 |
| 2 | 1234 |
| 3 | Ab |
| 3 | ab |
+------+------+
4 rows in set (0.00 sec)
2. 按 'ab'檢索返回兩條記錄,如果是Oracle則只會返回一條數據。
root@test 09:12:43>select * from test where name='ab';
+------+------+
| id | name |
+------+------+
| 3 | Ab |
| 3 | ab |
+------+------+
2 rows in set (0.00 sec)
3. 查看gbk的當前編碼格式COLLATION是gbk_chinese_ci, 即大小寫不敏感, 存儲的二進制編碼都是一樣的,
所以在where子句中傳入'ab', 'aB',都會事先翻譯成相同的編碼,所以返回兩條記錄。
root@information_schema 10:13:57>select * from tables where table_schema='test' and table_name='TEST' \G
*************************** 1. row ***************************
TABLE_CATALOG: def
TABLE_SCHEMA: test
TABLE_NAME: test
TABLE_TYPE: BASE TABLE
ENGINE: InnoDB
VERSION: 10
ROW_FORMAT: Compact
TABLE_ROWS: 5
AVG_ROW_LENGTH: 3276
DATA_LENGTH: 16384
MAX_DATA_LENGTH: 0
INDEX_LENGTH: 0
DATA_FREE: 0
AUTO_INCREMENT: NULL
CREATE_TIME: 2016-08-18 11:14:42
UPDATE_TIME: NULL
CHECK_TIME: NULL
TABLE_COLLATION: gbk_chinese_ci
CHECKSUM: NULL
CREATE_OPTIONS:
TABLE_COMMENT:
--證明都是按小寫來存儲的。
root@information_schema 10:23:02>select ascii(name), id from test.test;
+-------------+------+
| ascii(name) | id |
+-------------+------+
| 97 | 1 |
| 49 | 2 |
| 65 | 3 |
| 97 | 3 |
| 49 | 12 |
+-------------+------+
4. 如何設置好數據庫,使得能夠對于字段值區分大小寫: 要把編碼模式設置為非缺省值的COLLATE=gbk_bin
root@test 01:34:58>create table a(name varchar(10) ) ENGINE=InnoDB DEFAULT CHARSET=gbk COLLATE=gbk_bin;
Query OK, 0 rows affected (0.01 sec)
root@test 01:35:06>insert into a values('a');
Query OK, 1 row affected (0.00 sec)
root@test 01:35:16>insert into a values('A');
Query OK, 1 row affected (0.00 sec)
root@test 01:35:20>select * from a where name='a';
+------+
| name |
+------+
| a |
+------+
1 row in set (0.00 sec)
root@test 01:35:30>select * from a where name='A';
+------+
| name |
+------+
| A |
+------+
1 row in set (0.00 sec)
root@test 01:35:35>create table b (name varchar(10));
Query OK, 0 rows affected (0.00 sec)
備注:
utf8_bin將字符串中的每一個字符用二進制數據存儲,區分大小寫。
utf8_genera_ci不區分大小寫,ci為case insensitive的縮寫,即大小寫不敏感。
utf8_general_cs區分大小寫,cs為case sensitive的縮寫,即大小寫敏感。
“Mysql如何使得字段內容不區分大小寫”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。