1. 程式人生 > >SQL char、varchar、nvarchar、varchar2, nvarchar2 位元組 字元 漢字

SQL char、varchar、nvarchar、varchar2, nvarchar2 位元組 字元 漢字

一個字元佔多少位元組取決於資料庫字符集編碼欄位型別
mysql、oracle 欄位的長度一般是指位元組,也有例外(如:oracle的nvarchar,varchar(size char))

Mysql:char、varchar位元組、字元

  1. 編碼:
    1. GBK : 一個漢字 = 2個位元組,英文是一個位元組;
    2. UTF-8:一個漢字 = 3個位元組,英文是一個位元組;
  2. 查詢位元組或字元數函式
    1. 位元組:length() ;
    2. 字元:char_length() ;
    3. eg: select length(‘A打豆豆’), lengthb(‘A打豆豆’) from dual;
    位元組 length(‘A打豆豆’) 字元 char_length(‘A打豆豆’) 字符集編碼
    7 4 gbk
    10 4 utf8

Oracle:char、varchar、nvarchar、varchar2, nvarchar2 位元組 字元 漢字

  1. 編碼:select userenv(‘language’) from dual。
    1. SIMPLIFIED CHINESE_CHINA.ZHS16GBK :一個漢字佔用兩個位元組
    2. SIMPLIFIED CHINESE_CHINA.AL32UTF8:一個漢字佔用三個位元組
  2. 查詢位元組或字元數函式。
    1. 位元組:lengthb() ;
    2. 字元:length();
    3. eg: select lengthb(‘A打豆豆’), length(‘A打豆豆’) from dual;
    位元組 lengthb(‘A打豆豆’) 字元 length(‘A打豆豆’) 字符集編碼
    7 4 gbk
    10 4 utf8
  3. char 與 varchar:
    1. char為定長,輸入的字元小於定義時,它會再後面補空值;
    2. varchar為儲存變長資料,型別的實際長度是它的值的實際長度+1,這一個位元組用於儲存實際使用了多大的長度。
  4. varchar(size) 與 varchar2(size):
    1. 資料庫預設 size 表示位元組;
    2. varchar可以儲存空字串;而varchar2將在資料庫中varchar列可以儲存空字串的特性改為儲存NULL值
  5. varchar(size) 與 nvarchar(size):
    1. nvarchar不受資料庫字符集的影響。size單位是字元,而且不管是漢字還是字母,每個字元的長度都是2個位元組。
  6. varchar(size biyte) 與 varchar2(size char):
    1. varchar(size byte) : 最大長度size個位元組;
    2. varchar(size char):最大長度size個字元(中英文即可)。
型別 長度 單位 說明
char 定長 byte 輸入的字元小於定義時,它會再後面補空值;
varchar(size byte) 變長 byte varchar為儲存變長資料,型別的實際長度是它的值的實際長度+1,這一個位元組用於儲存實際使用了多大的長度。
varchar(size char) 變長 char size表示字元個數(中英文即可)
varchar2 變長 byte 儲存空字串改為儲存NULL值
nvarchar 變長 char 不受資料庫字符集的影響。size單位是字元,而且不管是漢字還是字母,每個字元的長度都是2個位元組。
  1. ASCII對應的字元都和英文佔位元組類似。