<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        MySQL查詢大小寫是否敏感問題分析

        來源:懂視網 責編:小采 時間:2020-11-09 19:12:54
        文檔

        MySQL查詢大小寫是否敏感問題分析

        MySQL查詢大小寫是否敏感問題分析:mysql數據庫在做查詢時候,有時候是英文字母大小寫敏感的,有時候又不是的,主要是由mysql的字符校驗規則的設置決定的,通常默認是不支持的大小寫字母敏感的。 1. 什么是字符集和校驗規則?字符集是一套符號和編碼。校對規則是在字符集內用于比較字符的一套規
        推薦度:
        導讀MySQL查詢大小寫是否敏感問題分析:mysql數據庫在做查詢時候,有時候是英文字母大小寫敏感的,有時候又不是的,主要是由mysql的字符校驗規則的設置決定的,通常默認是不支持的大小寫字母敏感的。 1. 什么是字符集和校驗規則?字符集是一套符號和編碼。校對規則是在字符集內用于比較字符的一套規
        mysql數據庫在做查詢時候,有時候是英文字母大小寫敏感的,有時候又不是的,主要是由mysql的字符校驗規則的設置決定的,通常默認是不支持的大小寫字母敏感的。

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

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

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

      1. 兩個不同的字符集不能有相同的校對規則。
      2. 每個字符集有一個默認校對規則。例如,utf8默認校對規則是utf8_general_ci。
      3. 存在校對規則命名約定:它們以其相關的字符集名開始,通常包括一個語言名,并且以_ci(大小寫不敏感)、_cs(大小寫敏感)或_bin(二元)結束。
      4. 2. 不同級別的字符集和校驗規則可控制大小寫敏感

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

        2.1服務器級

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

      5. 當服務器啟動時根據有效的選項設置
      6. 根據運行時的設定值
      7. 當啟動mysqld時,根據使用的初始選項設置來確定服務器字符集和校對規則。

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

        更改設定值的一個方法是通過重新編譯。如果希望在從源程序構建時更改默認服務器字符集和校對規則,使用:--with-charset和--with-collation作為configure的參量。例如:

        shell> ./configure --with-charset=latin1 --with-collation=latin1_german1_ci

        mysqld和configure都驗證字符集/校對規則組合是否有效。如果無效,每個程序都顯示一個錯誤信息,然后終止。

        2.2數據庫級

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

      8. 如果指定了character set X和collate Y,那么采用字符集X和校對規則Y。
      9. 如果指定了character set X而沒有指定collate Y,那么采用character set X和character set X的默認校對規則。
      10. 否則,采用服務器字符集和服務器校對規則。
      11. mysql> create database yutest default character set utf8 collate utf8_bin;Query OK, 1 row affected (0.00 sec)mysql> show variables like 'collation_%';+----------------------+-----------------+| Variable_name| Value |+----------------------+-----------------+| collation_connection | utf8_general_ci || collation_database | utf8_bin|| collation_server | utf8_general_ci |+----------------------+-----------------+3 rows in set (0.00 sec)mysql> select * from t1;+------+| name |+------+| ABC|| abc|+------+2 rows in set (0.00 sec)mysql> select * from t1 where name='abc';+------+| name |+------+| abc|+------+1 row in set (0.01 sec)

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

        2.3表級

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

      12. 如果指定了character set X和collateY,那么采用character set X和collate Y。
      13. 如果指定了character set X而沒有指定collate Y,那么采用character set X和character set X的默認校對規則。
      14. 否則,采用數據庫字符集和服務器校對規則。
      15. mysql> create database yutest2;Query OK, 1 row affected (0.01 sec)mysql> use yutest2;Database changedmysql> create table t1(name varchar(10))	-> default character set utf8 collate utf8_bin;Query OK, 0 rows affected (0.01 sec)mysql> insert into t1 values('ABC');Query OK, 1 row affected (0.00 sec)mysql> insert into t1 values('abc');Query OK, 1 row affected (0.00 sec)mysql> show variables like 'collation_%';+----------------------+-----------------+| Variable_name	| Value	 |+----------------------+-----------------+| collation_connection | utf8_general_ci || collation_database | utf8_general_ci || collation_server	 | utf8_general_ci |+----------------------+-----------------+3 rows in set (0.00 sec)mysql> select * from t1;+------+| name |+------+| ABC|| abc|+------+2 rows in set (0.00 sec)mysql> select * from t1 where name='abc';+------+| name |+------+| abc|+------+1 row in set (0.00 sec)

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

        2.4 連接級

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

        mysql> show variables like 'character%';+--------------------------+----------------------------+| Variable_name| Value|+--------------------------+----------------------------+| character_set_client | utf8 || character_set_connection | utf8 || character_set_database | utf8 || character_set_filesystem | binary || character_set_results| utf8 || character_set_server | utf8 || character_set_system | utf8 || character_sets_dir | /usr/share/mysql/charsets/ |+--------------------------+----------------------------+8 rows in set (0.00 sec)
      16. 當查詢離開客戶端后,在查詢中使用哪種字符集?
      17. 服務器使用character_set_client變量作為客戶端發送的查詢中使用的字符集。

      18. 服務器接收到查詢后應該轉換為哪種字符集?
      19. 轉換時,服務器使用character_set_connection和collation_connection系統變量。它將客戶端發送的查詢從character_set_client系統變量轉換到character_set_connection。

      20. 服務器發送結果集或返回錯誤信息到客戶端之前應該轉換為哪種字符集?
      21. character_set_results變量指示服務器返回查詢結果到客戶端使用的字符集。包括結果數據,例如列值和結果元數據(如列名)。

        3. 如果設置的是大小寫不敏感的校驗規則,仍然有方法區分查詢的大小寫

        3.1 在SQL語句中使用collate

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

        mysql> select * from t1 where name collate utf8_bin = 'ABC';+------+| name |+------+| ABC |+------+1 row in set (0.00 sec)mysql> select * from t1 where name = 'ABC';+------+| name |+------+| ABC || Abc || abc |+------+3 rows in set (0.00 sec)mysql> select * from t1;+------+| name |+------+| ABC || Abc || abc |+------+3 rows in set (0.00 sec)

        3.2 binary操作符

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

        select * from t1 order by binary a;select * from t1 order by a collate latin1_bin;
        mysql> select * from t1 where binary name = 'ABC';+------+| name |+------+| ABC |+------+1 row in set (0.00 sec)mysql>mysql> select * from t1 where name = 'ABC';+------+| name |+------+| ABC || Abc || abc |+------+3 rows in set (0.00 sec)

        參考鏈接:

        MySQL5.1參考手冊 第十章 字符集支持 https://dev.mysql.com/doc/refman/5.1/zh/charset.html#charset-collate

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        MySQL查詢大小寫是否敏感問題分析

        MySQL查詢大小寫是否敏感問題分析:mysql數據庫在做查詢時候,有時候是英文字母大小寫敏感的,有時候又不是的,主要是由mysql的字符校驗規則的設置決定的,通常默認是不支持的大小寫字母敏感的。 1. 什么是字符集和校驗規則?字符集是一套符號和編碼。校對規則是在字符集內用于比較字符的一套規
        推薦度:
        標簽: 查詢 大小寫 大小
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 99久久99这里只有免费费精品| A片在线免费观看| 成年性生交大片免费看| 亚洲成年人电影在线观看| 亚洲免费一级视频| 亚洲乱码一二三四区麻豆| 久久精品女人天堂AV免费观看| 亚洲综合激情另类小说区| 国产h视频在线观看网站免费| 亚洲国产精品免费在线观看| 99re热免费精品视频观看 | 久久国产精品免费| 亚洲人精品午夜射精日韩| 国产好大好硬好爽免费不卡| 噜噜噜亚洲色成人网站∨| 精品国产污污免费网站aⅴ| 亚洲va久久久久| 国产在线观看免费不卡| 亚洲天堂免费在线视频| 亚洲国产一区国产亚洲| 国产va精品免费观看| 国产精品亚洲专一区二区三区| 亚洲精品线路一在线观看| 日本中文字幕免费高清视频| 亚洲av永久无码嘿嘿嘿| 国产jizzjizz视频全部免费| 你懂的在线免费观看| 亚洲精品视频免费看| 国产国产成年年人免费看片| 免费无码作爱视频| 一本色道久久88—综合亚洲精品 | 国产1000部成人免费视频| 亚洲av中文无码乱人伦在线观看| 亚洲AV无码专区日韩| 日韩午夜理论免费TV影院| 亚洲色偷偷色噜噜狠狠99| 久久久亚洲精品蜜桃臀| 免费影院未满十八勿进网站| 十八禁的黄污污免费网站| 久久久久亚洲AV片无码下载蜜桃| 日韩a级毛片免费观看|