日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL中character的意思_mysql 中 character set 与 collation 的点滴理解

發布時間:2023/12/16 数据库 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL中character的意思_mysql 中 character set 与 collation 的点滴理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用 mysql 建立數據表的時候, 總免不了要涉及到 character set 和 collation 的概念, 以前不是很了解。java

這兩天不是很忙, 就本身整理了一下。mysql

先來看看 character set 和 collation 的是什么?sql

&. character set, 即字符集。數據庫

咱們常看到的 utf-8, GB2312, GB18030 都是相互獨立的 character set. 即對 Unicode 的一套編碼。app

那么如何理解 unicode 與 utf-8, GB2312 的區別呢?

打個比方,你眼前有一個蘋果,在英文里稱之為 apple, 而在中文里稱之為蘋果。

蘋果這個實體的概念就是 unicode , 而 utf-8, GB2312 能夠認為就是不一樣語言對蘋果的不一樣稱謂,本質上都是在描述蘋果這個物。

&. collation, 即比對方法。性能

用于指定數據集如何排序,以及字符串的比對規則。(這樣說可能比較抽象,后面會詳細解釋。)編碼

character set 與 collation 的關系code

軟件國際化是大勢所趨, 因此 unicode 是國際化最佳的選擇。固然為了提升性能,有些狀況下仍是使用 latin1 比較好。

mysql 有兩個支持 unicode 的 character set:

1. ucs2: 使用 16 bits 來表示一個 unicode 字符。

2. utf8: 使用 1~3 bytes 來表示一個 unicode 字符。

選擇哪一個 character set 視狀況而定,例如 utf8 表示 latin 字符只須要一個字節,因此當用戶數據大部分為英文等拉丁字符時,使用 utf8 比較節省數據庫的存儲空間。聽說 SQL Server 采用的是 ucs2, 我表示懷疑。

每一個 character set 會對應必定數量的 collation. 查看方法是在 mysql 的 console 下輸入:

mysql> show collation;

咱們會看到這樣的結果:

collation 名字的規則能夠概括為這兩類:

1. __

2. _bin

例如:

utf8_danish_ci

ci 是 case insensitive 的縮寫, cs 是 case sensitive 的縮寫。即,指定大小寫是否敏感。

奇怪的是 utf8 字符集對應的 collation 竟然沒有一個是 cs 的。

那么 utf8_general_ci, utf8_unicode_ci, utf8_danish_ci 有什么區別? 他們各自存在的意義又是什么?

同一個 character set 的不一樣 collation 的區別在于排序、字符春對比的準確度(相同兩個字符在不一樣國家的語言中的排序規則多是不一樣的)以及性能。

例如:

utf8_general_ci 在排序的準確度上要遜于 utf8_unicode_ci, 固然,對于英語用戶應該沒有什么區別。但性能上(排序以及比對速度)要略優于 utf8_unicode_ci. 例如前者沒有對德語中

? = ss

的支持。

而 utf8_danish_ci 相比 utf8_unicode_ci 增長了對丹麥語的特殊排序支持。

補充:

1. 當表的 character set 是 latin1 時,若字段類型為 nvarchar, 則字段的字符集自動變為 utf8.

可見 database character set, table character set, field character set 可逐級覆蓋。

2. 在 ci 的 collation 下,如何在比對時區分大小寫:

寫道

mysql> select * from pet;

+----------+-------+---------+------+------------+-------+

| name | owner | species | sex | birth | death |

+----------+-------+---------+------+------------+-------+

| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |

| whistler | Gwen | bird | NULL | 1988-09-25 | NULL |

+----------+-------+---------+------+------------+-------+

2 rows in set (0.00 sec)

mysql> select * from pet where name = 'whistler';

+----------+-------+---------+------+------------+-------+

| name | owner | species | sex | birth | death |

+----------+-------+---------+------+------------+-------+

| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |

| whistler | Gwen | bird | NULL | 1988-09-25 | NULL |

+----------+-------+---------+------+------------+-------+

2 rows in set (0.00 sec)

mysql> select * from pet where binary name = 'whistler';

+----------+-------+---------+------+------------+-------+

| name | owner | species | sex | birth | death |

+----------+-------+---------+------+------------+-------+

| whistler | Gwen | bird | NULL | 1988-09-25 | NULL |

+----------+-------+---------+------+------------+-------+

1 row in set (0.00 sec)

mysql> select * from pet where name = binary 'whistler';

+----------+-------+---------+------+------------+-------+

| name | owner | species | sex | birth | death |

+----------+-------+---------+------+------------+-------+

| whistler | Gwen | bird | NULL | 1988-09-25 | NULL |

+----------+-------+---------+------+------------+-------+

1 row in set (0.00 sec)

推薦使用

mysql> select * from pet where name = binary 'whistler';

這樣能夠保證當前字段的索引依然有效, 而

mysql> select * from pet where binary name = 'whistler';

會使索引失效。

參考列表:

1. What is the best collation to use for mysql with php.

2. Unicode Character Sets

3. Show Collation Syntax

4. The Binary Operator

總結

以上是生活随笔為你收集整理的MySQL中character的意思_mysql 中 character set 与 collation 的点滴理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。