程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySql字符集詳解

MySql字符集詳解

編輯:MySQL綜合教程

常用的字符集包括ASCII ,GB2312 , GBK , UTF-8 ,Unicode

首先要知道

\

ASCII編碼:

用一個字節來標識0-9的數字、大小寫字母、及一些標點和不可見字符。1個字節8位,可以有256種組合。標准的ASCII編碼只利用一個字節的後7位(128種組合),最高位用作奇偶校驗。

范圍為0000 0000 - 0111 1111 即 0-127

因為ASCII最多只有256種組合,中國漢字成千上萬,所以需要更多的字節來表示一個漢字,常見中文編碼的有GB2312和GBK。

GB2312編碼:

是中國計算機的本地編碼方式,用兩個字節來表示一個漢字。為了兼容ASCII編碼,這兩個字節的取值范圍都不在0-127,而是在128-255之間。則GB2312理論上最多有128*128=16384種組合。足夠表示常用的漢字。

現有以下幾個數,每個數表示一個字節,問哪些是GB2312編碼,哪些是用ASCII編碼?數字只是隨便舉的

128 200 65 189 178 23 213 186

128 200 因為兩個字節都在128-255之間,所以是用GB2312編碼的漢字

65 一個字節在0-127之間,所以是用ASCII編碼的,實際表示的是小寫字母‘a’。

189 178 同理是用GB2312編碼的漢字

213 186 也是用GB2312編碼的漢字

GBK編碼:

是GB2312的升級版,收容了更多的漢字。它也是用兩個字節表示漢字,第一個字節的理論范圍依舊是128-255之間,但第二個字節范圍變為0-255。理論上最多能表示128*256種組合。同樣能兼容ASCII編碼。

比如

128 65 65 189 178 23 213 186

因為128不在0-127之間,所以從128開始的2個字節表示的是一個漢字

65在0-127,所以用一個字節表示小寫字母‘a’。

189 178 同理189不在0-127之間,表示的是一個漢字

213 186 同理213 不在0-127之間,表示的是一個漢字

Unicode字符集:

Unicode其實只是相當於一張表,用4個字節給去全世界的文字進行了編號。

UTF-8編碼:

UTF-8和Unicode的關系,相當於壓縮文件與源文件的關系,UTF-8用來壓縮Unicode。UTF-8是變長編碼,理論上用1到6字節來表示一個字符。

\

最高位是0的,用1個字節來表示一個字符

最高位有n個連續的1,則用個n個字節表示一個字符。

MySql亂碼問題:

亂碼問題有兩種可能:1、解碼與對應的編碼不匹配。2、數據損壞。

第一種是可以解決的,第二種數據已損壞無法還原。

對於第一種情況,要先了解MySql的各個環節

n塊エky數據庫存儲數據的編碼方式不一致,則接著轉換成數據庫存儲數據的編碼方式。同理,當返回結果時,數據庫數據比對連接器編碼,不一致則轉成連接器編碼,再比對連接器編碼與結果集編碼,不一致則轉換成結果及編碼。

總而言之,只要客戶端、連接器、結果集編碼保持一致,大部分情況是不會出現亂碼的。

可以通過

set character_set_client = 編碼方式;設置客戶端編碼

set character_set_connection=編碼方式; 設置連接器編碼

set character_set_results=編碼方式; 設置接結果集編碼

這三句話也可以簡化為一句:set names 編碼方式

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved