亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

MySQL中查詢的有關英文字母大小寫問題的分析

2024-07-24 13:07:05
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了MySQL中查詢的有關英文字母大小寫問題的分析,作者從多個角度進行了實驗,需要的朋友可以參考下

mysql數據庫在做查詢時候,有時候是英文字母大小寫敏感的,有時候又不是的,主要是由mysql的字符校驗規則的設置決定的,通常默認是不支持的大小寫字母敏感的。

1. 什么是字符集和校驗規則?

字符集是一套符號和編碼。校對規則是在字符集內用于比較字符的一套規則。任何一個給定的字符集至少有一個校對規則,它可能有幾個校對規則。要想列出一個字符集的校對規則,使用SHOW COLLATION語句。

MySQL中查詢的有關英文字母大小寫問題的分析

校對規則一般有這些特征:

兩個不同的字符集不能有相同的校對規則。

每個字符集有一個默認校對規則。例如,utf8默認校對規則是utf8_general_ci。

存在校對規則命名約定:它們以其相關的字符集名開始,通常包括一個語言名,并且以_ci(大小寫不敏感)、_cs(大小寫敏感)或_bin(二元)結束。

2. 不同級別的字符集和校驗規則可控制大小寫敏感

MySQL5.1在同一臺服務器、同一個數據庫或甚至在同一個表中使用不同字符集或校對規則來混合定義字符串。字符集和校對規則有4個級別的默認設置:服務器級、數據庫級、表級和連接級。

2.1服務器級

MySQL按照如下方法確定服務器字符集和服務器校對規則:

(1)修改配置文件/etc/my.cnf

在[mysqld]下添加:collation_server = utf8_bin

重啟實例

MySQL中查詢的有關英文字母大小寫問題的分析

更改服務器級的校驗規則(collation_server )后,數據庫校驗規則(collation_collation)默認會繼承服務器級的。

注意:

這個只適用于在重新啟動之后, 新建的庫,已存在的庫不受影響.

同樣的, 即使庫的校驗規則改了,已經存在的表不受修改影響;

同理與已經存在的列...

 

 
  1. mysql> create database yutest0; 
  2. Query OK, 1 row affected (0.00 sec) 
  3. mysql> use yutest0; 
  4. Database changed 
  5. mysql> create table t1 (name varchar(10)); 
  6. Query OK, 0 rows affected (0.01 sec) 
  7.  
  8. mysql> insert into t1 values('AAA'); 
  9. Query OK, 1 row affected (0.00 sec) 
  10. mysql> insert into t1 values('aaa'); 
  11. Query OK, 1 row affected (0.01 sec) 
  12.  
  13. mysql> select * from t1; 
  14. +------+ 
  15. name | 
  16. +------+ 
  17. | AAA | 
  18. | aaa | 
  19. +------+ 
  20. rows in set (0.00 sec) 
  21.  
  22. mysql> select * from t1 where name='aaa'
  23. +------+ 
  24. name | 
  25. +------+ 
  26. | aaa | 
  27. +------+ 
  28. 1 row in set (0.00 sec) 

可以看出,在服務器級進行相應的校對規則設置,查詢大小寫敏感。

(2)當服務器啟動時根據有效的選項設置

當啟動mysqld時,根據使用的初始選項設置來確定服務器字符集和校對規則。

shell> mysqld --character-set-server=latin1 --collation-server=latin1_swedish_ci

2.2數據庫級

MySQL這樣選擇數據庫字符集和數據庫校對規則:

如果指定了character set X和collate Y,那么采用字符集X和校對規則Y。

如果指定了character set X而沒有指定collate Y,那么采用character set X和character set X的默認校對規則。

否則,采用服務器字符集和服務器校對規則。

(1)修改配置文件/etc/my.cnf

進行了兩組測試:

1) 在[mysqld]下添加:

 

 
  1. collation_server = utf8_bin 
  2.  
  3. collation_database = utf8_bin 

2) 在[mysqld]下添加:

 

  
  1. collation_database = utf8_bin 

重啟實例,兩組都不能正常啟動,錯誤信息如下:

MySQL中查詢的有關英文字母大小寫問題的分析

可見,my.cnf配置文件中不支持設置collation_database 變量。

(2)創建數據庫時設置數據庫校驗規則

 

 
  1. mysql> create database yutest default character set utf8 collate utf8_bin; 
  2. Query OK, 1 row affected (0.00 sec) 
  3. mysql> show variables like 'collation_%'
  4. +----------------------+-----------------+ 
  5. | Variable_name | Value | 
  6. +----------------------+-----------------+ 
  7. | collation_connection | utf8_general_ci | 
  8. | collation_database | utf8_bin | 
  9. | collation_server | utf8_general_ci | 
  10. +----------------------+-----------------+ 
  11. rows in set (0.00 sec) 
  12. mysql> select * from t1; 
  13. +------+ 
  14. name | 
  15. +------+ 
  16. | ABC | 
  17. | abc | 
  18. +------+ 
  19. rows in set (0.00 sec) 
  20.  
  21. mysql> select * from t1 where name='abc'
  22. +------+ 
  23. name | 
  24. +------+ 
  25. | abc | 
  26. +------+ 
  27. 1 row in set (0.01 sec) 

可以看出,在數據庫級進行相應的校對規則設置,查詢大小寫敏感。

2.3表級

MySQL按照下面的方式選擇表字符集和校對規則:

如果指定了character set X和collate Y,那么采用character set X和collate Y。

如果指定了character set X而沒有指定collate Y,那么采用character set X和character set X的默認校對規則。

否則,采用數據庫字符集和服務器校對規則。

在創建表時設置表級校驗規則:

 

 
  1. mysql> create database yutest2; 
  2. Query OK, 1 row affected (0.01 sec) 
  3. mysql> use yutest2; 
  4. Database changed 
  5.  
  6. mysql> create table t1(name varchar(10)) 
  7. -> default character set utf8 collate utf8_bin; 
  8. Query OK, 0 rows affected (0.01 sec) 
  9.  
  10. mysql> insert into t1 values('ABC'); 
  11. Query OK, 1 row affected (0.00 sec) 
  12. mysql> insert into t1 values('abc'); 
  13. Query OK, 1 row affected (0.00 sec) 
  14.  
  15. mysql> show variables like 'collation_%'
  16. +----------------------+-----------------+ 
  17. | Variable_name | Value | 
  18. +----------------------+-----------------+ 
  19. | collation_connection | utf8_general_ci | 
  20. | collation_database | utf8_general_ci | 
  21. | collation_server | utf8_general_ci | 
  22. +----------------------+-----------------+ 
  23. rows in set (0.00 sec) 
  24.  
  25. mysql> select * from t1; 
  26. +------+ 
  27. name | 
  28. +------+ 
  29. | ABC | 
  30. | abc | 
  31. +------+ 
  32. rows in set (0.00 sec) 
  33.  
  34. mysql> select * from t1 where name='abc'
  35. +------+ 
  36. name | 
  37. +------+ 
  38. | abc | 
  39. +------+ 
  40. 1 row in set (0.00 sec) 

可以看出,在表級進行相應的校對規則設置,查詢大小寫敏感。

2.4 連接級

考慮什么是一個“連接”:它是連接服務器時所作的事情??蛻舳税l送SQL語句,例如查詢,通過連接發送到服務器。服務器通過連接發送響應給客戶端,例如結果集。對于客戶端連接,這樣會導致一些關于連接的字符集和校對規則的問題,這些問題均能夠通過系統變量來解決:

 

 
  1. mysql> show variables like 'character%'
  2. +--------------------------+----------------------------+ 
  3. | Variable_name | Value | 
  4. +--------------------------+----------------------------+ 
  5. | character_set_client | utf8 | 
  6. | character_set_connection | utf8 | 
  7. | character_set_database | utf8 | 
  8. | character_set_filesystem | binary | 
  9. | character_set_results | utf8 | 
  10. | character_set_server | utf8 | 
  11. | character_set_system | utf8 | 
  12. | character_sets_dir | /usr/share/mysql/charsets/ | 
  13. +--------------------------+----------------------------+ 
  14. rows in set (0.00 sec) 

當查詢離開客戶端后,在查詢中使用哪種字符集?

服務器使用character_set_client變量作為客戶端發送的查詢中使用的字符集。

服務器接收到查詢后應該轉換為哪種字符集?

轉換時,服務器使用character_set_connection和collation_connection系統變量。它將客戶端發送的查詢從character_set_client系統變量轉換到character_set_connection。

服務器發送結果集或返回錯誤信息到客戶端之前應該轉換為哪種字符集?

character_set_results變量指示服務器返回查詢結果到客戶端使用的字符集。包括結果數據,例如列值和結果元數據(如列名)。

3. 創建數據庫表時大小寫不敏感,仍然有方法在查詢時區分大小寫

3.1 在SQL語句中使用collate

使用collate子句,能夠為一個比較覆蓋任何默認校對規則。collate可以用于多種SQL語句中,比如where,having,group by,order by,as,聚合函數。

 

 
  1. mysql> select * from t1 where name collate utf8_bin = 'ABC'
  2. +------+ 
  3. name | 
  4. +------+ 
  5. | ABC | 
  6. +------+ 
  7. 1 row in set (0.00 sec) 
  8.  
  9. mysql> select * from t1 where name = 'ABC'
  10. +------+ 
  11. name | 
  12. +------+ 
  13. | ABC | 
  14. | Abc | 
  15. | abc | 
  16. +------+ 
  17. rows in set (0.00 sec) 
  18.  
  19. mysql> select * from t1; 
  20. +------+ 
  21. name | 
  22. +------+ 
  23. | ABC | 
  24. | Abc | 
  25. | abc | 
  26. +------+ 
  27. rows in set (0.00 sec) 

3.2 binary操作符

binary操作符是collate子句的一個速記符。binary 'x'等價與'x' collate y,這里y是字符集'x'二元校對規則的名字。每一個字符集有一個二元校對規則。例如,latin1字符集的二元校對規則是latin1_bin,因此,如果列a是字符集latin1,以下兩個語句有相同效果:

 

 
  1. select * from t1 order by binary a; 
  2.  
  3. select * from t1 order by a collate latin1_bin; 
  4.  
  5. mysql> select * from t1 where binary name = 'ABC'
  6. +------+ 
  7. name | 
  8. +------+ 
  9. | ABC | 
  10. +------+ 
  11. 1 row in set (0.00 sec) 
  12. mysql> 
  13. mysql> select * from t1 where name = 'ABC'
  14. +------+ 
  15. name | 
  16. +------+ 
  17. | ABC | 
  18. | Abc | 
  19. | abc | 
  20. +------+ 
  21. rows in set (0.00 sec) 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产亚洲欧美日韩美女| 国产福利视频一区| 亚洲第一国产精品| 国产精品视频成人| 亚洲色图50p| 欧美成人网在线| 国产视频一区在线| 国产在线拍偷自揄拍精品| 不卡av日日日| 4444欧美成人kkkk| 91精品国产乱码久久久久久蜜臀| 国产精品极品尤物在线观看| 亚洲国模精品私拍| 日韩国产高清视频在线| 国产69精品久久久| 精品一区二区电影| 在线成人一区二区| 亚洲v日韩v综合v精品v| 欧美精品在线免费观看| 亚洲精品午夜精品| 国产suv精品一区二区三区88区| 国产视频亚洲精品| 国产噜噜噜噜噜久久久久久久久| 亚洲另类激情图| 亚洲黄一区二区| 国外成人在线播放| 欧洲成人午夜免费大片| 欧美中文在线观看国产| 亚洲欧美国产日韩天堂区| 亚洲视频网站在线观看| 国产精品96久久久久久又黄又硬| 欧美在线视频a| 亚洲最大福利视频网| 精品成人在线视频| 久久久久久久国产| 91久久久久久国产精品| 色婷婷综合久久久久中文字幕1| 97视频在线观看播放| 欧美日韩加勒比精品一区| 美女福利精品视频| 成人黄色网免费| 久久天堂电影网| 国产精品海角社区在线观看| 久久亚洲国产精品成人av秋霞| 亚洲美女av在线| 久久天天躁狠狠躁夜夜躁| 黑人极品videos精品欧美裸| 亚洲丝袜一区在线| 日韩av网站大全| 欧美精品在线看| 久久久久国产精品免费| xxxx性欧美| 青草成人免费视频| 国产v综合ⅴ日韩v欧美大片| 97精品视频在线| 国产精品一区二区久久久| 日韩中文综合网| 国产91在线播放| 欧美精品在线免费观看| 欧美日韩一区二区三区| 欧美性资源免费| 日韩高清人体午夜| 国产精品美女呻吟| 久久久免费av| 国产成人在线亚洲欧美| 国产免费一区二区三区香蕉精| 亚洲视频在线观看免费| 亚洲性夜色噜噜噜7777| 国产精品99久久99久久久二8| 国产精品成熟老女人| 国产成人精品在线视频| 在线观看日韩专区| 久久九九精品99国产精品| 亚洲黄色免费三级| 亚洲精品乱码久久久久久金桔影视| 亚洲成人aaa| 欧美性高潮床叫视频| 欧美黑人一级爽快片淫片高清| 韩国精品美女www爽爽爽视频| 亚洲综合色激情五月| 日韩男女性生活视频| 亚洲理论在线a中文字幕| 国产视频精品xxxx| 久久精品国产欧美亚洲人人爽| 欧美视频中文字幕在线| 亚洲网址你懂得| 欧美重口另类videos人妖| 欧美xxxx做受欧美| 久久99国产精品久久久久久久久| 韩国19禁主播vip福利视频| 美女精品久久久| 亚洲天堂男人的天堂| 一区二区亚洲欧洲国产日韩| 久久久久久久国产精品视频| 亚洲人成在线一二| 亚洲精品国产成人| 麻豆国产va免费精品高清在线| 国产精品私拍pans大尺度在线| 国产日韩视频在线观看| 亚洲国产三级网| 91av在线网站| 日韩欧美中文免费| 不卡av电影在线观看| 91国产精品电影| 亚洲欧美激情视频| 色综合视频网站| 懂色av中文一区二区三区天美| 亚洲一区二区日本| 国产精品视频99| 亚洲激情视频在线播放| 伊人久久综合97精品| 国产又爽又黄的激情精品视频| 欧美色xxxx| 久久亚洲精品毛片| 成人看片人aa| 乱亲女秽乱长久久久| 色妞一区二区三区| 国产一区二中文字幕在线看| 国产99久久精品一区二区永久免费| 亚洲最大激情中文字幕| 国产精品日日摸夜夜添夜夜av| 久久九九热免费视频| 久久久免费高清电视剧观看| 国产视频精品自拍| 国模私拍一区二区三区| 欧美日韩国产一区在线| 久久99久国产精品黄毛片入口| 91高清在线免费观看| 欧美一级视频免费在线观看| 久久视频在线视频| 九色精品免费永久在线| 国产精品视频免费观看www| 一本一本久久a久久精品牛牛影视| 91精品国产91久久久久久最新| 国产精品福利无圣光在线一区| 国产一区二区三区三区在线观看| 亚洲精品欧美极品| 亚洲美女精品久久| 久久久久久亚洲精品| 一区二区三区亚洲| 国产成人精品a视频一区www| 疯狂欧美牲乱大交777| 高清一区二区三区四区五区| 日韩av免费一区| 中文字幕av一区二区三区谷原希美| 欧美在线观看日本一区| 国产精品极品美女在线观看免费| 精品国产依人香蕉在线精品| 黑人极品videos精品欧美裸| 久久人体大胆视频| 97国产精品人人爽人人做| 亚洲综合色激情五月| 久久久精品国产一区二区| 亚洲成在人线av| 91精品久久久久久久久中文字幕| 91久久精品国产91久久性色| 亚洲激情在线观看视频免费| 日韩视频在线免费| 色噜噜狠狠色综合网图区| 日韩国产欧美精品一区二区三区| 成人精品一区二区三区电影免费| 欧美成人剧情片在线观看| 精品久久久久久久久久久久| 国产精品亚洲第一区|