Mysql:文法:字元集、定序

來源:互聯網
上載者:User

字元集、定序

  • 字元集就是 字形符號+對應的編碼  的 集合
  • 定序就是 如何理解和處理排序

 

mysql自覺其對字元集和定序的處理問題領先於其他資料庫系統

基本特性:

  • 分層:server、database、table、column、文字常量
  • 分層:server、client
  • 分層:系統設定檔、系統變數、子句
  • 功能簡單:每一級對下一級僅僅是起預設設定的作用,no other purpose
  • 靈活:隨時、隨機 可以修改
  • 支援豐富:
  • 智能:不用擔心出錯!

 

基本命令和變數

  • 命令:{show character set|show charaet} show collation;
  • 變數:character_set_server collation_server、character_set_database collation_database、character_set_connection collation_connection、character_Set_client 、character_set_results、character_set_system
  • 選項:--character-set-server --collation-server

 

注意

  • 文字常量的預設字元集和定序是相關串連connection變數設定的。可以通過 [_character set name]'字元序列' [collation name] 修改,注意有個 "_"!
  • 另外文字常量中的 逸出字元總是connection串連變數指定的字元集中的"\x",意思是:如果指定的文字常量的字元集和串連級字元集設定如果不一致,逸出字元會使用串連級字元集中的對應逸出字元的encode!不過僅僅當connection字元集為latin??????還有只是認為逸出字元的endcode必須是單一位元組字元集"\"???或者說:逸出字元"\"在某些字元集下根本是無效的?
  • nchar:本質上是ansisql標準中的char中的一個具有預先定義的字元集屬性的特例而已
  • unicode是character set ucs2的別名
  • 字元集 和 定序 是相關聯的。除非特殊需求,只要設定其一即可。設定字元集,即設定了預設的定序;設定定序,就肯定設定了其關聯的字元集

方便的設定字元集

  • set names 'character_set_name' [collate collation_name] 相當於下面的操作
  1. set character_set_clent='character_set_name'
  2. set character_set_connection='character_set_name'
  3. set character_set_results='character_set_name'
  • set character set 'character_set name' 相當於下面的操作:
  1. set character_set_clent='character_set_name'
  2. set collation_connection=collation_database  --這一點和set names 不同
  3. set character_set_results='character_set_name'

 

使用mysql.exe內建用戶端程式的字元集設定

  • 選項檔案配置:default-character-set
  • 命令列參數:--default-character-set
  • 命令:set names
  • 命令:set character set
  • 命令:charset  --和set names 類似,但是影響以後的reconnnect
  • 如果讓server發出的資訊、結果集不進行任何字元集轉換:set character_set_results={null|binary}
  • ucs2字元集不能應用於character_set_client,如果你設定了,他不起任何作用
  • 查詢當前設定:show variables like ‘’

 

對於其他用戶端環境

  • 你必須要考慮應用程式所處的執行環境:是否支援字元集,字元集是否相容,有無相關的配置或初始化字元集動作等等!

 

如果讓server發出的資訊、結果集不進行任何字元集轉換:set character_set_results={null|binary},這個時候結果的字元集是有character_set_system系統變數決定的

mysql的中繼資料 是utf8字元集編碼的

定序

  • 對於比較、排序、運算式來說,定序有著重要而靈活的應用。他幾乎可以用在sql語句的任何部分
  • binary 'str' 和 cast('str' as binary)完全相同
  • binary(m) = char(m) character set binary【<>char(m) binary】。該文法是定義二進位類型的一種形式。使用於所有文本類型。注意後面是欄位屬性:表示使用字元集的 二進位定序
  • 特殊的binary定序模式  和 _bin定序,二者是不相同的
  • 單位不同:位元組單位 和 字元編碼單位
  • 字元集轉換:無 和 有
  • 對某些函數的影響lower()...:有 和 無
  • 比較時是否考慮尾隨空格:考慮  和 不考慮
  • 插入 和 擷取是尾隨空格的處理:char(m)或右填充空格,但擷取是trim掉;而binary(m)或右填充0x00,擷取是保留
  • 字元集和定序的壓縮性
  • unicode字元集 和 非unicode字元集,總是轉換非 unicode字元集 到unicode字元集
  • 同一個字元集下的"_bin"、"_cs"、"_ci"字元集混雜時,總是應用"_bin"的定序
  • 如果可壓縮性形同,字元集相同,又不屬於以上情況(定序為"_cs"、"_ci"),哈哈哈,你死了!
  • 越小越高越穩定:
  • 0:collate子句 
  • 1:兩個不同定序的字串串連
  • 2:表列、儲存程式、本地變數
  • 3:系統常量、系統函數
  • 4:文本常量的定序
  • 5:null

  • 字元集中字元的包容性:ascii是安全的
  • 字元集對模型操作、函數的影響
  1. 簡單函數的輸出字元資料的字元集、定序和輸入參數的完全相同:instr、mid、substring、lower、lcase、ucase、upper、left、right、ltrim、rtrim、trim、reverse、repea、rpad、soundex,特殊的replace總是大小寫敏感的
  2. charset()、collation()函數返回字串的字元集、定序
  3. 對於多個輸入,一個輸出的函數:
  • 如果有一個collate子句,就是他了
  • 如果有2或更多個collate子句,恭喜,你死了
  • 如果collation 都相同,就用它
  • 其他,binary

顯示字元集轉換

  • convert('str' using character_set_name)  --ansi sql標準
  • cast('str' as 字元資料類型 character set  character_set_name)
  • cast('str' as 字元資料類型 ) collate collation_name

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.