varchar

比CHAR更加靈活的數據類型

VARCHAR是一種比CHAR更加靈活的數據類型,同樣用於表示字元數據,但是VARCHAR可以保存可變長度的字元串。其中M代表該數據類型所允許保存的字元串的最大長度,只要長度小於該最大值的字元串都可以被保存在該數據類型中。因此,對於那些難以估計確切長度的數據對象來說,使用VARCHAR數據類型更加明智。VARCHAR數據類型所支持的最大長度也是255個字元。

數據類型區別


VARCHAR型和CHAR型數據的這個差別是細微的,但是非常重要。他們都是用來儲存字元串長度小於255的字元,mysql5.0之前是varchar支持最大255。
假如你向一個長度為四十個字元的VARCHAR型欄位中輸入數據Bill Gates。當你以後從這個欄位中取出此數據時,你取出的數據其長度為十個字元——字元串Bill Gates的長度。假如你把字元串輸入一個長度為四十個字元的CHAR型欄位中,那麼當你取出數據時,所取出的數據長度將是四十個字元。字元串的後面會被附加多餘的空格。
當你建立自己的站點時,你會發現使用VARCHAR型欄位要比CHAR型欄位方便的多。使用VARCHAR型欄位時,你不需要為剪掉你數據中多餘的空格而操心。
VARCHAR型欄位的另一個突出的好處是它可以比CHAR型欄位佔用更少的內存和硬碟空間。當你的資料庫很大時,這種內存和磁碟空間的節省會變得非常重要.
雖然VARCHAR使用起來較為靈活,但是從整個系統的性能角度來說,CHAR數據類型的處理速度更快,有時甚至可以超出VARCHAR處理速度的50%。因此,用戶在設計資料庫時應當綜合考慮各方面的因素,以求達到最佳的平衡。

特點簡介

1、使用比固定長度類型(char)佔用更少存儲空間(除了使用ROW_FORMAT=FIXED創建的MyISAM表)。
2、使用額外的1-2位元組來存儲值長度,列長度<=255使用1位元組保存,其它情況使用2位元組保存。例如varchar(10)會佔用11位元組存儲空間,varchar(500)會佔用502位元組存儲空間。
3、節約空間,所以性能會有幫助。在更新的時候會產生額外的工作。
4、5.0以上版本,取值或設置值都會保存字元串末尾的空格,4.1之前的版本都會把字元串末尾的空格刪除掉。
5、最大長度遠大於平均長度,很少發生更新的時候適合使用varchar,因為碎片更少了。

數據類型特點

1、使用固定長度。
2、保存的時候會去掉字元串末尾的空格。
3、適合保存MD5后的哈希值或經常改變的值,因為固定的行不容易產生碎片。

數據類型示例


舉例如下:
car_model VARCHAR(10);
INT (M) [Unsigned]
INT數據類型用於保存從- 2147483647 到2147483648範圍之內的任意整數數據。如果用戶使用Unsigned選項,則有效數據範圍調整為0-4294967295。舉例如下:
light_years INT;
按照上述數據類型的設置,-24567為有效數據,而3000000000則因為超出了有效數據範圍成為無效數據。
再例如:
light_years INT unsigned;
這時,3000000000成為有效數據,而-24567則成為無效數據。
FLOAT [(M,D)]
FLOAT數據類型用於表示數值較小的浮點數據,可以提供更加準確的數據精度。其中,M代表浮點數據的長度(即小數點左右數據長度的總和),D表示浮點數據位於小數點右邊的數值位數。
舉例如下:
rainfall FLOAT (4,2);
按照上述數據類型的設置,42.35為有效數據,而324.45和3.542則因為超過數據長度限制或者小數點右邊位數大於規定值2成為無效數據。
DATE
DATE數據類型用於保存日期數據,默認格式為YYYY-MM-DD。MySQL提供了許多功能強大的日期格式化和操作命令,本文無法在此一一進行介紹,感興趣的讀者可以參看MySQL的技術文檔。
DATE數據類型舉例如下:
the_date DATE;
TEXT / BLOB
TEXT和BLOB數據類型可以用來保存255 到65535個字元,如果用戶需要把大段文本保存到資料庫內的話,可以選用TEXT或BLOB數據類型。TEXT和BLOB這兩種數據類型基本相同,唯一的區別在於TEXT不區分大小寫,而BLOB對字元的大小寫敏感。
SET
SET數據類型是多個數據值的組合,任何部分或全部數據值都是該數據類型的有效數據。SET數據類型最大可以包含64個指定數據值。
舉例如下:
transport SET ("trUCk", "wagon") NOT NULL;
根據上述數據類型的設置,truck、wagon、以及truck,wagon都可以成為transport的有效值。
ENUM
ENUM數據類型和SET基本相同,唯一的區別在於ENUM只允許選擇一個有效數據值。例如:
transport ENUM ("truck", "wagon") NOT NULL;
根據上述設置,truck或wagon將成為transport的有效數據值。