mysql手冊上說:
在MySQL 5.x版本中,CHAR和VARCHAR型別宣告的長度表示你想要儲存的最大字元數。例如,CHAR(30)可以佔用30個字元。GBK內碼的情況下,一個漢字佔兩個位元組,但是在UTF-8內碼的情況下,一個漢字需要佔用三個位元組。
詳情請見:http://dev.mysql.com/doc/refman/5.1/zh/column-types.html#char
什麼是字元?
百度百科裡說:
字元是指電腦中使用的字母、數字、字和符號,包括: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。根據Google的統計,UTF-8是目前最常用於網頁的編碼方式。[1]相較於大部分的字元編碼把字元對應到數字或位元串,摩斯密碼則是使用不定長度的電子脈衝的序列來表現字元。
各種字元請參看:“字元大全” http://www.qqgexing.com/zifu/zifu.asp
什麼是位元組?
位元組,英文名稱是Byte。Byte是Binary Term的縮寫。一個位元組代表八個位元(bit)。它是通常被作為電腦資訊計量單位,不論被儲存資料的類型為何。它也是程式設計語言裡不可缺少的基礎資料型別 (Elementary Data Type)——整數。
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會自動截短,我們在實際應用中應該注意。