1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          collate(MYSQL中COLLATE的作用是什么)

          來源:互聯網轉載 時間:2024-05-12 22:59:33

          COLLATE是用來做什么的?

          使用phpmyadmin的開發可能會非常眼熟,因為其中的中文表頭已經給出了答案:

          所謂utf8_unicode_ci,其實是用來排序的規則。對于MySQL中那些字符類型的列,如VARCHAR,char,TEXT類型的列,都需要有一個COLLATE類型來告知mysql如何對該列進行排序和比較。簡而言之,COLLATE會影響到ORDER BY語句的順序,會影響到WHERE條件中大于小于號篩選出來的結果,會影響**DISTINCT**、**GROUP BY**、**HAVING**語句的查詢結果。另外,mysql建索引的時候,如果索引列是字符類型,也會影響索引創建,只不過這種影響我們感知不到??傊?凡是涉及到字符類型比較或排序的地方,都會和COLLATE有關。

          各種COLLATE的區別

          COLLATE通常是和數據編碼(CHARSET)相關的,一般來說每種CHARSET都有多種它所支持的COLLATE,并且每種CHARSET都指定一種COLLATE為默認值。例如Latin1編碼的默認COLLATE為latin1_swedish_ci,GBK編碼的默認COLLATE為gbk_chinese_ci,utf8mb4編碼的默認值為utf8mb4_general_ci。

          這里順便講個題外話,mysql中有utf8和utf8mb4兩種編碼,在mysql中請大家忘記**utf8**,永遠使用**utf8mb4**。這是mysql的一個遺留問題,mysql中的utf8最多只能支持3bytes長度的字符編碼,對于一些需要占據4bytes的文字,mysql的utf8就不支持了,要使用utf8mb4才行。

          很多COLLATE都帶有_ci字樣,這是Case Insensitive的縮寫,即大小寫無關,也就是說"A"和"a"在排序和比較的時候是一視同仁的。selection * from table1 where field1="a"同樣可以把field1為"A"的值選出來。與此同時,對于那些_cs后綴的COLLATE,則是Case Sensitive,即大小寫敏感的。

          在mysql中使用show collation指令可以查看到mysql所支持的所有COLLATE。以utf8mb4為例,該編碼所支持的所有COLLATE如下圖所示。

          imgmysql中和utf8mb4相關的所有COLLATE

          圖中我們能看到很多國家的語言自己的排序規則。在國內比較常用的是utf8mb4_general_ci(默認)、utf8mb4_unicode_ci、utf8mb4_bin這三個。我們來探究一下這三個的區別:

          首先utf8mb4_bin的比較方法其實就是直接將所有字符看作二進制串,然后從最高位往最低位比對。所以很顯然它是區分大小寫的。

          而utf8mb4_unicode_ci和utf8mb4_general_ci對于中文和英文來說,其實是沒有任何區別的。對于我們開發的國內使用的系統來說,隨便選哪個都行。只是對于某些西方國家的字母來說,utf8mb4_unicode_ci會比utf8mb4_general_ci更符合他們的語言習慣一些,general是mysql一個比較老的標準了。例如,德語字母“&szlig;”,在utf8mb4_unicode_ci中是等價于"ss"兩個字母的(這是符合德國人習慣的做法),而在utf8mb4_general_ci中,它卻和字母“s”等價。不過,這兩種編碼的那些微小的區別,對于正常的開發來說,很難感知到。本身我們也很少直接用文字字段去排序,退一步說,即使這個字母排錯了一兩個,真的能給系統帶來災難性后果么?從網上找的各種帖子討論來說,更多人推薦使用utf8mb4_unicode_ci,但是對于使用了默認值的系統,也并沒有非常排斥,并不認為有什么大問題。結論:推薦使用utf8mb4_unicode_ci,對于已經用了utf8mb4_general_ci的系統,也沒有必要花時間改造。

          另外需要注意的一點是,從mysql 8.0開始,mysql默認的CHARSET已經不再是Latin1了,改為了utf8mb4(參考鏈接),并且默認的COLLATE也改為了utf8mb4_0900_ai_ci。utf8mb4_0900_ai_ci大體上就是unicode的進一步細分,0900指代unicode比較算法的編號( Unicode Collation Algorithm version),ai表示accent insensitive(發音無關),例如e, è, é, ê 和 &euml;是一視同仁的。相關參考鏈接1,相關參考鏈接2

          COLLATE設置級別及其優先級

          設置COLLATE可以在示例級別、庫級別、表級別、列級別、以及SQL指定。實例級別的COLLATE設置就是mysql配置文件或啟動指令中的collation_connection系統變量。

          庫級別設置COLLATE的語句如下:

          CREATE DATABASE <db_name> DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
          如果庫級別沒有設置CHARSET和COLLATE,則庫級別默認的CHARSET和COLLATE使用實例級別的設置。在mysql8.0以下版本中,你如果什么都不修改,默認的CHARSET是Latin1,默認的COLLATE是latin1_swedish_ci。從mysql8.0開始,默認的CHARSET已經改為了utf8mb4,默認的COLLATE改為了utf8mb4_0900_ai_ci。

          表級別的COLLATE設置,則是在CREATE TABLE的時候加上相關設置語句,例如:

          CREATETABLE(……)ENGINE=InnoDBDEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_unicode_ci;

          如果表級別沒有設置CHARSET和COLLATE,則表級別會繼承庫級別的CHARSET與COLLATE。

          列級別的設置,則在CREATE TABLE中聲明列的時候指定,例如

          CREATETABLE(`field1`VARCHAR(64)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNOTNULLDEFAULT'',……)……

          如果列級別沒有設置CHARSET和COLATE,則列級別會繼承表級別的CHARSET與COLLATE。

          最后,你也可以在寫SQL查詢的時候顯示聲明COLLATE來覆蓋任何庫表列的COLLATE設置,不太常用,了解即可:

          SELECTDISTINCTfield1COLLATEutf8mb4_general_ciFROMtable1;SELECTfield1,field2FROMtable1ORDERBYfield1COLLATEutf8mb4_unicode_ci;

          如果全都顯示設置了,那么優先級順序是 SQL語句 > 列級別設置 > 表級別設置 > 庫級別設置 > 實例級別設置。也就是說列上所指定的COLLATE可以覆蓋表上指定的COLLATE,表上指定的COLLATE可以覆蓋庫級別的COLLATE。如果沒有指定,則繼承下一級的設置。即列上面沒有指定COLLATE,則該列的COLLATE和表上設置的一樣。

          上述內容就是MYSQL中COLLATE的作用是什么,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注本站行業資訊頻道。

          標簽:collate-

          c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...

          2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...

          :喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...

          深圳前海概念股是什么意思?前海概念股包括哪些股票?一起跟隨小編簡單了解下。希望對大家有幫助。深圳前海概念股是什么意思?前海的概念是指位于深圳, 南山半島西部連接深, 港兩地的前海,占地1400萬平方米,主要包括800萬平方米的商業倉儲用地、400萬平方米的商業設備和200萬平方米的市政配套設施。2010年《前??傮w規劃》被國務院原則批準建設金融商業中心城市,也就是所謂的“前海概念&rd...

          (相關資料圖)最近這段時間總有小伙伴問小編下顎粉碎踢詳細怎么使用是什么,小編為此在網上搜尋了一些有關于下顎粉碎踢詳細怎么使用的知識送給大家,希望能解答各位小伙伴的疑惑。下顎粉碎踢是攻擊對手下顎而造成對手腦震蕩而導致的暈眩,如果力量夠強大可以使對方下顎粉碎,普通的也可以造成對手輕微腦震蕩而暈眩,用出就差不多可以一擊必殺。 就算對手的下顎是鋼板做的也沒用,穿透力會直接造成腦震蕩。訓練方法:需要鍛煉韌性...

          國投發債于8月20日上市進行交易,債券代碼為1 10073,債券簡稱為國投轉債,申購代碼為733061, 申購簡稱為國投發債,原股東配售認購簡稱為國投配債。國投發債是指國投資本股份有限公司公開發行的可轉換公司債券。國投資本股份有限公司的股票為國投資本,股票代碼為: 600061。國投資本股份有限公司最早成立于1997年并于同年5月在上海證券交易所上市,成立時名稱為中紡投資發展股份有限公司。2015...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>