在建立數(shù)據(jù)庫表結(jié)構(gòu)的時候侠仇,為了給一個String類型的數(shù)據(jù)定義一個數(shù)據(jù)庫的數(shù)據(jù)庫類型,一般參考的都是char或者varchar,這兩種選擇有時候讓人很糾結(jié)翻翩,今天想總結(jié)一下它們兩者的區(qū)別檐盟,明確一下選擇塔門的理由褂萧。
首先明確的是,char的長度是不可變的葵萎,而varchar的長度是可變的导犹,也就是說唱凯,定義一個char[10]和varchar[10],如果存進去的是‘csdn’,那么char所占的長度依然為10,除了字符‘csdn’外谎痢,后面跟六個空格磕昼,而varchar就立馬把長度變?yōu)?了,取數(shù)據(jù)的時候节猿,char類型的要用trim()去掉多余的空格票从,而varchar是不需要的,盡管如此滨嘱,char的存取數(shù)度還是要比varchar要快得多峰鄙,因為其長度固定,方便程序的存儲與查找太雨;但是char也為此付出的是空間的代價吟榴,因為其長度固定,所以難免會有多余的空格占位符占據(jù)空間囊扳,可謂是以空間換取時間效率吩翻,而varchar是以空間效率為首位的。再者锥咸,char的存儲方式是仿野,對英文字符(ASCII)占用1個字節(jié),對一個漢字占用兩個字節(jié)她君;而varchar的存儲方式是脚作,對每個英文字符占用2個字節(jié),漢字也占用2個字節(jié)缔刹,兩者的存儲數(shù)據(jù)都非unicode的字符數(shù)據(jù)球涛。