MySQL手冊上說:
在MySQL 5.x版本中,CHAR和VARCHAR類型聲明的長度表示你想要保存的最大字符數。例如,CHAR(30)可以占用30個字符。GBK內碼的情況下,一個漢字占兩個字節,但是在UTF-8內碼的情況下,一個漢字需要占用三個字節。
什麼是字符?
百度百科裡說:
字符是指計算機中使用的字母、數字、字和符號,包括:1、2、3、A、B、C、~!·#¥%……—*()——+等等。1個漢字字符存儲需要2個字節,1個英文字符存儲需要1個字節,2個數字為一個字節。例如在VB中求字符串的長度時,len(str(1234))=4,len(1234)=2。
字符是可使用多種不同字符方案或代碼頁來表示的抽象實體。例如,Unicode UTF-16 編碼將字符表示為 16 位整數序列,而 Unicode UTF-8 編碼則將相同的字符表示為 8 位字節序列。公共語言運行庫使用 Unicode UTF-16(Unicode 轉換格式,16 位編碼形式)表示字符。
針對公共語言運行庫的應用程序使用編碼將字符表式形式從本機字符方案映射至其他方案。應用程序使用解碼將字符從非本機方案映射至本機方案。
電腦和通訊設備會使用字符編碼的方式來表達字符。意思是指,會將一個字符指定給某個東西。傳統上,是代表整數量的位元序列,如此,則可透過網絡來傳輸,同時亦便於儲存。兩個常用的例子是ASCII和用於統一碼的UTF-8。根據谷歌的統計,UTF-8是目前最常用於網頁的編碼方式。[1]相較於大部分的字符編碼把字符對應到數字或位元串,摩斯密碼則是使用不定長度的電子脈沖的序列來表現字符。
各種字符請參看:“字符大全” http://www.QQgexing.com/zifu/zifu.ASP
什麼是字節?
字節,英文名稱是Byte。Byte是Binary Term的縮寫。一個字節代表八個比特(bit)。它是通常被作為計算機信息計量單位,不論被存儲數據的類型為何。它也是程序設計語言裡不可缺少的基本數據類型——整數。
Byte(字節)可被縮寫成B,例如MB表示Megabyte;Bit(比特)可被縮寫成b,例如Mb表示Megabit。
那麼如果我們想定義最大能存儲10個漢字的字段,該怎麼定義呢?
有了上面的說明,應該很明了了char(10)或者varchar(10)。我們來驗證一下:
CREATE TABLE `t1` (
`str` varchar(10) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
向表中插入下列數據:
代碼insert into `t1`(`str`) values ('一二三四五六七八九十');
insert into `t1`(`str`) values ('一二三四五六七八九十十一');
insert into `t1`(`str`) values ('abcdefghijklmnopqrst');
insert into `t1`(`str`) values ('1234567890123456');
我們來查看下結果:
由此可以印證上面說的內容,而且如果超出了定義的范圍,MySQL會自動截短,我們在實際應用中應該注意。