今天作sql查詢,發現字段值沒區分大小寫mysql
mysql> select guid,type,parent_guid from api_assets where guid='3rfI2PsSrCz91mTMDgrZjE';
+------------------------+--------+------------------------+
| guid | type | parent_guid |
+------------------------+--------+------------------------+
| 3rfI2PsSrCz91mTMDgrZjE | Window | 3rfI2PsSrCz91mTMDgry9E |
| 3rfI2PsSrCz91mTMDgrzje | Member | 3rfI2PsSrCz91mTMDgrzj1 |
| 3rfI2PsSrCz91mTMDgrzjE | Plate | 3rfI2PsSrCz91mTMDgrzjU |
+------------------------+--------+------------------------+sql
系統:數據庫
win7api
數據庫版本ui
mysql> select version();
+------------+
| version() |
+------------+
| 5.7.26-log |
+------------+spa
解決方法code
1.查詢時指定大小寫敏感blog
在查詢時指定大小寫「敏感」,加關鍵字「BINARY」排序
mysql> select guid,type,parent_guid from api_assets where BINARY guid='3rfI2PsSrCz91mTMDgrZjE';
+------------------------+--------+------------------------+
| guid | type | parent_guid |
+------------------------+--------+------------------------+
| 3rfI2PsSrCz91mTMDgrZjE | Window | 3rfI2PsSrCz91mTMDgry9E |
+------------------------+--------+------------------------+ci
mysql> select guid,type,parent_guid from api_assets where guid= BINARY '3rfI2PsSrCz91mTMDgrZjE';
+------------------------+--------+------------------------+
| guid | type | parent_guid |
+------------------------+--------+------------------------+
| 3rfI2PsSrCz91mTMDgrZjE | Window | 3rfI2PsSrCz91mTMDgry9E |
+------------------------+--------+------------------------+
2.定義表結構時指定字段大小寫敏感
關鍵字「BINARY」指定guid字段大小寫敏感
CREATE TABLE `api_assets` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `guid` varchar(255) BINARY NOT NULL, …… ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
MySQL容許在大多數字符串類型上使用BINARY關鍵字,用於指明全部針對該字段的運算是大小寫敏感的
3.修改排序規則(COLLATION)
mysql> show variables like 'collation\_database';
+--------------------+-----------------+
| Variable_name | Value |
+--------------------+-----------------+
| collation_database | utf8_general_ci |
+--------------------+-----------------+
Collation以 "_ci"結尾的不區分大小寫(ci——Case Ignore),以"_bin"或者"_cs"結尾的區分大小寫
將Collation改成 utf8_bin(大小寫敏感的)
能夠爲庫、表、列指定Collation。
優先級爲 列>表>庫
eg:
mysql> CREATE DATABASE test COLLATE utf8_bin;
Query OK, 1 row affected
mysql> use test;
Database changed
mysql> show variables like 'collation\_database';
+--------------------+----------+
| Variable_name | Value |
+--------------------+----------+
| collation_database | utf8_bin |
+--------------------+----------+
mysql> select guid,type,parent_guid from api_assets where
guid='3rfI2PsSrCz91mTMDgrZjE';
+------------------------+--------+------------------------+
| guid | type | parent_guid |
+------------------------+--------+------------------------+
| 3rfI2PsSrCz91mTMDgrZjE | Window | 3rfI2PsSrCz91mTMDgry9E |
| 3rfI2PsSrCz91mTMDgrzje | Member | 3rfI2PsSrCz91mTMDgrzj1 |
| 3rfI2PsSrCz91mTMDgrzjE | Plate | 3rfI2PsSrCz91mTMDgrzjU |
+------------------------+--------+------------------------+
3 rows in set
mysql> ALTER TABLE `api_assets` DEFAULT CHARACTER SET=utf8 COLLATE=utf8_bin;
Query OK, 0 rows affected
Records: 0 Duplicates: 0 Warnings: 0
mysql> select guid,type,parent_guid from api_assets where guid='3rfI2PsSrCz91mTMDgrZjE';
+------------------------+--------+------------------------+
| guid | type | parent_guid |
+------------------------+--------+------------------------+
| 3rfI2PsSrCz91mTMDgrZjE | Window | 3rfI2PsSrCz91mTMDgry9E |
| 3rfI2PsSrCz91mTMDgrzje | Member | 3rfI2PsSrCz91mTMDgrzj1 |
| 3rfI2PsSrCz91mTMDgrzjE | Plate | 3rfI2PsSrCz91mTMDgrzjU |
+------------------------+--------+------------------------+
3 rows in set
mysql> ALTER TABLE `api_assets` MODIFY COLUMN `guid` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL AFTER `id`;
Query OK, 3344 rows affected
Records: 3344 Duplicates: 0 Warnings: 0
mysql> select guid,type,parent_guid from api_assets where guid='3rfI2PsSrCz91mTMDgrZjE';+------------------------+--------+------------------------+| guid | type | parent_guid |+------------------------+--------+------------------------+| 3rfI2PsSrCz91mTMDgrZjE | Window | 3rfI2PsSrCz91mTMDgry9E |+------------------------+--------+------------------------+1 row in set