資料庫表字段為varchar(n)型別,存英文很簡單,只要字母個數不大於n即可。
但是對於漢字,按照同樣的方法就不行了。因為對於漢字不同的字符集,在資料庫占用的位元組是不一樣的。
utf-8字符集,乙個漢字佔三個位元組,gbk字符集,乙個漢字佔兩個位元組,比如varchar(10)型別的字段,utf-8的漢字,只能存3個,gbk字符集的漢字卻能存5個。
所以在程式中根據表字段varchar的大小,儲存或更新時作出必要的校驗否則後台會報錯。
位元組就是byte
漢字=2/3位元組
1位元組(byte)=8字位=8個二進位制數
1字位(bit)=1個二進位制數
1b=8b 1kb=1024b 1mb=1024kb 1gb=1024mb
通常情況下,把b稱為位元組、b稱為字位、kb稱為千位元組、mb稱為兆位元組、gb稱為吉位元組。
string name = "a";
int num =encoding.utf8.getbytes(name).length;//1
string name2 = "a"
;
int num2 =encoding.utf8.getbytes(name2).length;//1
string name3 = "朱"
;
int num3 =encoding.utf8.getbytes(name3).length;//3
string name4 = "0"
;
int num4 =encoding.utf8.getbytes(name4).length;//1
string name5 = "朱朱"
;
int num5 = encoding.utf8.getbytes(name5).length;//6
英文本母:位元組數 :1; 編碼:gb2312
位元組數 :
1; 編碼:gbk
位元組數 :
1; 編碼:gb18030
位元組數 :
1; 編碼:iso-8859-1位元組數 :
1; 編碼:utf-8位元組數 :
4; 編碼:utf-16
位元組數 :
2; 編碼:utf-16be
位元組數 :
2; 編碼:utf-16le中文漢字:位元組數 :
2; 編碼:gb2312
位元組數 :
2; 編碼:gbk
位元組數 :
2; 編碼:gb18030
位元組數 :
1; 編碼:iso-8859-1
位元組數 : 3; 編碼:utf-8位元組數 :
4; 編碼:utf-16
位元組數 :
2; 編碼:utf-16be
位元組數 :
2; 編碼:utf-16le
漢字是兩個位元組嗎?(非也,漢字位元組與編碼格式有關)
位元組數 1 編碼 gb2312 位元組數 1 編碼 gbk 位元組數 1 編碼 gb18030 位元組數 1 編碼 iso 8859 1 位元組數 1 編碼 utf 8 位元組數 4 編碼 utf 16 位元組數 2 編碼 utf 16be 位元組數 2 編碼 utf 16le位元組數 2 編碼 ...
bit ,byte,位,位元組,漢字關係
1 bit 1 二進位制資料 1 byte 8 bit 1 字母 1 byte 8 bit 1 漢字 2 byte 16 bit 1.bit 位 乙個二進位制資料0或1,是1bit 2.byte 位元組 儲存空間的基本計量單位,如 mysql中定義 varchar 45 即是指 45個位元組 1 b...
bit byte 位 位元組 漢字的關係
bit byte 位 位元組 漢字的關係 1 bit 1 二進位制資料 1 byte 8 bit 1 字母 1 byte 8 bit 1 漢字 2 byte 16 bit 4.乙個漢字佔2個位元組 1 漢字 2 byte 16 bit 5.標點符號 a 漢字輸入狀態下,預設為全形輸入方式 b 英文輸...