varchar - 表示字符數(shù)據(jù)的數(shù)據(jù)類型
VARCHAR - M是一種比CHAR更加靈活的數(shù)據(jù)類型,同樣用于表示字符數(shù)據(jù),但是VARCHAR可以保存可變長度的字符串。其中M代表該數(shù)據(jù)類型所允許保存的字符串的最大長度,只要長度小于該最大值的字符串都可以被保存在該數(shù)據(jù)類型中。因此,對于那些難以估計(jì)確切長度的數(shù)據(jù)對象來說,使用VARCHAR數(shù)據(jù)類型更加明智。VARCHAR數(shù)據(jù)類型所支持的最大長度也是255個(gè)字符。
與char的區(qū)別
VARCHAR型和CHAR型數(shù)據(jù)的這個(gè)差別是細(xì)微的,但是非常重要。他們都是用來儲存字符串長度小于255的字符,mysql5.0之前是varchar支持最大255。
假如你向一個(gè)長度為四十個(gè)字符的VARCHAR型字段中輸入數(shù)據(jù)Bill Gates。當(dāng)你以后從這個(gè)字段中取出此數(shù)據(jù)時(shí),你取出的數(shù)據(jù)其長度為十個(gè)字符——字符串Bill Gates的長度。 假如你把字符串輸入一個(gè)長度為四十個(gè)字符的CHAR型字段中,那么當(dāng)你取出數(shù)據(jù)時(shí),所取出的數(shù)據(jù)長度將是四十個(gè)字符。字符串的后面會被附加多余的空格。
當(dāng)你建立自己的站點(diǎn)時(shí),你會發(fā)現(xiàn)使用VARCHAR型字段要比CHAR型字段方便的多。使用VARCHAR型字段時(shí),你不需要為剪掉你數(shù)據(jù)中多余的空格而操心。
VARCHAR型字段的另一個(gè)突出的好處是它可以比CHAR型字段占用更少的內(nèi)存和硬盤空間。當(dāng)你的數(shù)據(jù)庫很大時(shí),這種內(nèi)存和磁盤空間的節(jié)省會變得非常重要.
雖然VARCHAR使用起來較為靈活,但是從整個(gè)系統(tǒng)的性能角度來說,CHAR數(shù)據(jù)類型的處理速度更快,有時(shí)甚至可以超出VARCHAR處理速度的50%。因此,用戶在設(shè)計(jì)數(shù)據(jù)庫時(shí)應(yīng)當(dāng)綜合考慮各方面的因素,以求達(dá)到最佳的平衡。
varchar特點(diǎn)
1、使用比固定長度類型 - char占用更少存儲空間 - 除了使用ROW_FORMAT=FIXED創(chuàng)建的MyISAM表。
2、使用額外的1-2字節(jié)來存儲值長度,列長度<=255使用1字節(jié)保存,其它情況使用2字節(jié)保存。例如varchar - 10會占用11字節(jié)存儲空間,varchar - 500會占用502字節(jié)存儲空間。
3、節(jié)約空間,所以性能會有幫助。在更新的時(shí)候會產(chǎn)生額外的工作。
4、5.0以上版本,取值或設(shè)置值都會保存字符串末尾的空格,4.1之前的版本都會把字符串末尾的空格刪除掉。
5、最大長度遠(yuǎn)大于平均長度,很少發(fā)生更新的時(shí)候適合使用varchar,因?yàn)樗槠倭恕?/p>
char特點(diǎn)
1、使用固定長度。
2、保存的時(shí)候會去掉字符串末尾的空格。
3、適合保存MD5后的哈希值或經(jīng)常改變的值,因?yàn)楣潭ǖ男胁蝗菀桩a(chǎn)生碎片。
示例
舉例如下:
car_model VARCHAR - 10;
INT - M [Unsigned]
INT數(shù)據(jù)類型用于保存從- 2147483647 到2147483648范圍之內(nèi)的任意整數(shù)數(shù)據(jù)。如果用戶使用Unsigned選項(xiàng),則有效數(shù)據(jù)范圍調(diào)整為0-4294967295。舉例如下:
light_years INT;
按照上述數(shù)據(jù)類型的設(shè)置,-24567為有效數(shù)據(jù),而3000000000則因?yàn)槌隽擞行?shù)據(jù)范圍成為無效數(shù)據(jù)。
再例如:
light_years INT unsigned;
這時(shí),3000000000成為有效數(shù)據(jù),而-24567則成為無效數(shù)據(jù)。
FLOAT [ - M,D]
FLOAT數(shù)據(jù)類型用于表示數(shù)值較小的浮點(diǎn)數(shù)據(jù),可以提供更加準(zhǔn)確的數(shù)據(jù)精度。其中,M代表浮點(diǎn)數(shù)據(jù)的長度(即小數(shù)點(diǎn)左右數(shù)據(jù)長度的總和),D表示浮點(diǎn)數(shù)據(jù)位于小數(shù)點(diǎn)右邊的數(shù)值位數(shù)。
舉例如下:
rainfall FLOAT - 4,2;
按照上述數(shù)據(jù)類型的設(shè)置,42.35為有效數(shù)據(jù),而324.45和3.542則因?yàn)槌^數(shù)據(jù)長度限制或者小數(shù)點(diǎn)右邊位數(shù)大于規(guī)定值2成為無效數(shù)據(jù)。
DATE
DATE數(shù)據(jù)類型用于保存日期數(shù)據(jù),默認(rèn)格式為YYYY-MM-DD。MySQL提供了許多功能強(qiáng)大的日期格式化和操作命令,本文無法在此一一進(jìn)行介紹,感興趣的讀者可以參看MySQL的技術(shù)文檔。
DATE數(shù)據(jù)類型舉例如下:
the_date DATE;
TEXT / BLOB
TEXT和BLOB數(shù)據(jù)類型可以用來保存255 到65535個(gè)字符,如果用戶需要把大段文本保存到數(shù)據(jù)庫內(nèi)的話,可以選用TEXT或BLOB數(shù)據(jù)類型。TEXT和BLOB這兩種數(shù)據(jù)類型基本相同,唯一的區(qū)別在于TEXT不區(qū)分大小寫,而BLOB對字符的大小寫敏感。
SET
SET數(shù)據(jù)類型是多個(gè)數(shù)據(jù)值的組合,任何部分或全部數(shù)據(jù)值都是該數(shù)據(jù)類型的有效數(shù)據(jù)。SET數(shù)據(jù)類型最大可以包含64個(gè)指定數(shù)據(jù)值。
舉例如下:
transport SET - "trUCk", "wagon" NOT NULL;
根據(jù)上述數(shù)據(jù)類型的設(shè)置,truck、wagon、以及truck,wagon都可以成為transport的有效值。
ENUM
ENUM數(shù)據(jù)類型和SET基本相同,唯一的區(qū)別在于ENUM只允許選擇一個(gè)有效數(shù)據(jù)值。例如:
transport ENUM - "truck", "wagon" NOT NULL;
根據(jù)上述設(shè)置,truck或wagon將成為transport的有效數(shù)據(jù)值。
