跟我一起學習MySQL技術內幕(第五版):(第三章學習日記2上)

來源:互聯網
上載者:User

標籤:

3.1.2字串值

3.1.2.1字串類型與字元集支援
3.1.2.2字元集相關的系統變數

3.1.2.1字串類型與字元集支援
字串值一般可以分為兩類,二進位串和非二進位串

    二進位串:一組位元組序列,沒有特殊的比較或者排序屬性.            比較操作是基於各位元組的數值逐個位元組實現的.            所有位元組都有意義,**甚至包括結尾的空格**.    非二進位串:一個字元序列,每個二進位串都與字元集相關.            字元集決定了:MySQL如何解釋字串內容,哪些字元可以用.            每個字元集都有一種或者多種定序.            **尾部空格不會參與比較(TEXT類型除外-具有唯一性索引)**

字串所使用的定序決定了字元在字元集裡的先後順序,這會對比較操作產生影響.

預設的字元集和定序分別為latin1和latin_swedish_ci.

查看伺服器上提供的字元集以及定序:

show character set;+----------+-----------------------------+---------------------+--------+| Charset  | Description                 | Default collation   | Maxlen |+----------+-----------------------------+---------------------+--------+| big5     | Big5 Traditional Chinese    | big5_chinese_ci     |      2 || dec8     | DEC West European           | dec8_swedish_ci     |      1 || cp850    | DOS West European           | cp850_general_ci    |      1 || hp8      | HP West European            | hp8_english_ci      |      1 || koi8r    | KOI8-R Relcom Russian       | koi8r_general_ci    |      1 |..............show collation;--------------------------+----------+-----+---------+----------+---------+| Collation                | Charset  | Id  | Default | Compiled | Sortlen |+--------------------------+----------+-----+---------+----------+---------+| big5_chinese_ci          | big5     |   1 | Yes     | Yes      |       1 || big5_bin                 | big5     |  84 |         | Yes      |       1 || dec8_swedish_ci          | dec8     |   3 | Yes     | Yes      |       1 || dec8_bin                 | dec8     |  69 |         | Yes      |       1 || cp850_general_ci         | cp850    |   4 | Yes     | Yes      |       1 || cp850_bin                | cp850    |  80 |         | Yes      |       1 |................

每種定序都捆綁在某個特定的字元集上,而每個給定的字元集可以有多種定序.
格式: 字元集名語言名附加尾碼
尾碼規則如下:
_ci表示定序不區分大小寫
_cs表示定序要區分大小寫
_bin表示這是一種二進位定序.(比較操作基於數字字元編碼值進行,與語言無關)
如:utf8_bin

二進位串和非二進位串的排序特性:

二: 逐位元組進行比較,結果只取決於每個位元組的數值大小,區分大小寫(大小寫不同,對應
位元組數值不同,二進位串其實並沒有大小寫概念區分大小寫實際上是定序的一項功能)

非二:按字元進行比較,每一個字元的相對值取決於當前所用字元集的定序.大小寫設定為同一排序值,所以不區分大小寫(不適用於區分大小寫非二進位排序)

確定某個字串的字元集和定序:
(預設情況下,MySQL會把十六進位常量當作二進位串對待)

select charset(x‘0123‘),collation(x‘0123‘);+------------------+--------------------+| charset(x‘0123‘) | collation(x‘0123‘) |+------------------+--------------------+| binary           | binary             |+------------------+--------------------+

有兩種記法約定可以用於將某個字串強制解釋為某種指定的字元集.
1._charset str

_latin2 ‘abc‘_latin2 x‘616263‘_latin2 0x616263_utf8 ‘def‘_utf8 X‘646566‘_utf8 0x646566
對於引號裡的字串:     字元集引導符與字串之間空白可選     十六進位不能留有任何空白

2.N’str’(等價於_utf8’str’)
N的後面必須緊跟一個引號形式的字串,不能有任何空白

(3.對於字串運算式或列值的引導符記法)

convert (str using charset);

引導符和convert是不一樣的,引導符只會改變對字串的解釋,不會改變值,而convert是一個函數,進入的是輸入參數,產生一個新的字串返回.

set @s1 = _ucs2 ‘ABCD‘;set @s2 = convert (‘ABCD‘ using ucs2);select char_length(@s1), length(@s1), char_length(@s2), length(@s2);+------------------+-------------+------------------+-------------+| char_length(@s1) | length(@s1) | char_length(@s2) | length(@s2) |+------------------+-------------+------------------+-------------+|                2 |           4 |                4 |           8 |+------------------+-------------+------------------+-------------+

第一條語句:把ABCD每一對字元解釋為一個雙位元組ucs2字元
第二條語句:把每個字元轉化為相應的ucs2字元.

這一節最後介紹了二進位串使用二進位串定序的非二進位串的區別.
1.二進位串沒有字元集的概念.它會被解釋為位元組,並且比較的是單位元組的數字代碼
2.使用了二進位定序的非二進位串,會被解釋為字元,並且比較的是它們的數字字元值,這種值通常是基於每個字元多個位元組算出的.

set    @s1 = binary ‘abcd‘;set    @s2 = _latin1‘abcd‘ collate latin1_bin;   select upper(@s1),upper(@s2);+------------+------------+| upper(@s1) | upper(@s2) |+------------+------------+| abcd       | ABCD       |+------------+------------+

二進位串根本沒有字元集的概念,所以無從得知哪些位元組值對應著大寫或者小寫字元.如果非要這麼做,可以選擇先 convert再使用upper lower函數.

3.1.2.2字元集相關的系統變數

這一小節pass  暫時並沒有什麼用  一切使用預設就好了

跟我一起學習MySQL技術內幕(第五版):(第三章學習日記2上)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.