mysql常見字符集 MySQL字符集

2021-10-17 21:31:41 字數 3164 閱讀 2878

一.字符集介紹

什麼是字符集(charset)

字符集:是乙個系統支援的所有抽象字元的集合。字元是各種文字和符號的總稱,包括各國家文字、標點符號、圖形符號、數字等。

1.gbk/gb2312

gbk/gb2312

採用雙位元組字符集,不論中、英文本元均使用雙字元來表示,為了區分中文,將其最高位都設定成1

gb2312是gbk的子集,gbk是gb18030的子集,gb2312僅能儲存簡體中文本元

gbk包括中日韓字元的大字符集

通常使用gbk字符集足夠

國際通用性比utf8差,不過utf8占用的資料庫比gbk大(utf8是三位元組字符集)

2.utf8/utf8mb4

utf全稱(unicode transformation format),是unicode的一種儲存方式,可變長度字元編碼,又稱萬國碼

資料庫字符集盡量使用utf8(包括 connect、result、及最終html頁面都必須要求一致為utf8)

utf8使用可變長度位元組來儲存 unicode字元,例如 ascii字母繼續使用1個位元組儲存,重音文字、希臘字母、或西里爾字母等使用2個位元組來儲存,而常用的漢字就要用3個位元組;也就是乙個英文本元等於乙個位元組,乙個中文(含繁體)等於三個位元組。

utf8mb4乙個字元最多能存4位元組,所以能支援更多的字符集;專案中常用utf8mb4存放emoji表情

latin1

是8bit (1 bytes)字符集,但不能覆蓋亞洲、非洲語言

unidoce是latin1的擴充套件,增加了亞洲、非洲常規語言支援,但仍不支援全部語言,且ascii用unidoce來表示效率不高(小字符集轉換成大字符集,往往便隨的就是字元的丟失)

utf8是unicode的擴充套件

gbk、gb2312等字符集與utf8之間都必須通過unicode編碼才能相互轉換

二.字符集使用建議

字符集檢視和校驗值檢視命令

mysql> show charset;

mysql> show collation;

1、非常肯定只有中文終端使用者時,可選擇gbk / gb2312

2、為了方便資料遷移、以及多種終端展示,最好是utf8

3、字元無需區分大小寫時,採用預設的xx_ci校驗集可以,否則選擇xx_bin或cs校驗集(生產環境中,盡量不要修改校驗集)

4、預設字符集是latin1,該字符集存放漢字是分開存放,以至於檢索結果時不夠精確,好處就是節省空間,不推薦使用

三.mysql字符集的範圍和優先順序

字符集範圍

伺服器層(server) > 資料庫成(database) > 資料表(table) > 字段(column) > 連線(connection) | 結果集(result)

字符集優先順序

連線(connection) | 結果集(result) > 字段(column) > 資料表(table) > 資料庫成(database) > 伺服器層(server)

四.字符集設定

1.作業系統級別

1)centos 6.x 版本

[root@db01 ~]# vim /etc/sysconfig/i18n

lang="en_us.utf-8"

sysfont="latarcyrheb-sun16"

2)centos 7.x 版本

[root@db01 ~]# vim /etc/locale.conf

lang="en_us.utf-8"

2.mysql例項級別

方法一:編譯安裝時指定

cmake .

-ddefault_charset=utf8 \

-ddefault_collation=utf8_general_ci \

-dwith_extra_charsets=all \

方法二:配置檔案中設定字符集。

vim /etc/my.cnf

[mysqld]

character-set-server=utf8

3.庫別級別的字符集設定

#庫級別的字符集

mysql> create database oldboy charset utf8;

#表級別的字符集

mysql> create table mysql.oldboy(id int)charset utf8;

4.其它的修改字符集的方式

1.臨時生效

mysql> set character_set = 'gbk';

mysql> set character_set_client = 'gbk';

2.全域性生效

mysql> set global character_set_client = 'gbk';

query ok, 0 rows affected (0.00 sec)

五.常用的資料型別

#整型int -2^31 ~ 2^31-1

tinyint -128 ~ 127

#字串型別

char 定長

char(n):n代表的是字元個數(也叫字元長度)、而非bytes

char(n):是固定長儲存,占用定長的儲存空間,不足的部分用空格填充;mysql處理char(n)型別時,需要將空格strip掉後return。

儲存空間:char(n)型別的儲存空間和字符集有關係,結合剛才字符集的知識點,乙個中文在utf8字符集中占用3個bytes、gbk占用2個bytes、數字和字元統一用乙個字元表示。

儲存機制:在不夠n長度時,mysql在儲存資料時,需要用填充特殊的空格,而非十六進製制的20

varchar 變長

varchar(n):n代表的是字元個數(也叫字元長度)、而非bytes

varchar(n):是變長儲存,僅使用必要的儲存空間.

儲存空間:varchar(n)型別的儲存空間和字符集有關係,結合剛才字符集的知識點,乙個中文在utf8字符集中占用3個bytes、gbk統一占用2個bytes、數字和字元乙個字元表示。

儲存機制:varchar(n)字段儲存實際是從第二個位元組開始儲存,然後用1到2個位元組表示實際長度,剩下的才是可以儲存資料的範圍,因此最大可用儲存範圍是65535-3=65532位元組;第乙個位元組標識是否為空.(長度小於255位元組,使用乙個位元組來表示長度;大於255位元組使用兩個位元組來表示長度)

#列舉型別

enum

#日期型別

datetime

timestamp

常見字符集 亂碼問題

常用字符集分類 ascii及其擴充套件字符集 作用 表語英語及西歐語言。位數 ascii是用7位表示的,能表示128個字元 其擴充套件使用8位表示,表示256個字元。範圍 ascii從00到7f,擴充套件從00到ff。iso 8859 1字符集 作用 擴充套件ascii,表示西歐 希臘語等。位數 8...

mysql 集群字符集 Mysql 字符集

字符集與字元比較 字符集字符集是某種字元的集合,比如最常見的ascii碼,由127個字元組成,只需要乙個位元組就能表示 我們常說的字符集還是gbk iso utf8 mysql 我們使用得最多的字符集就是gbk 和 utf8了 他們都是變長字符集,如果字元在ascii範圍內就使用乙個位元組表示,其他...

mysql字符集 MySQL字符集選擇

一 怎樣選擇合適的字符集 對mysql資料庫來說,字符集很重要,因為資料庫儲存的資料大部分都是各種文字,字符集對資料庫的儲存,處理效能都會有所影響。主要考慮一下幾方面的因素 1.滿足應用支援語言的需求,應用處理各種各樣的文字,發布到使用不同語言的國家或地區,可以選擇unicode字符集,mysql的...