非空CHAR的最大總長度是255【字節】;非空VARCHAR的最大總長度是65533【字節】。
可空CHAR的最大總長度是254【字節】;可空VARCHAR的最大總長度是65532【字節】。
原因:非空標記需要占據一個字節,VARCHAR超過255需要用2個字節標記字段長度,不超過255用1個字節標記字段長度.
定義一個char[10]和varchar[10],如果存進去的是‘abcd’,那么char所占的長度依然為10,除了字符‘abcd’外,后面跟六個空格,而varchar就立馬把長度變為4了,取數據的時候,char類型的要用trim()去掉多余的空格,而varchar是不需要的
char的存儲方式是,對英文字符(ASCII)占用1個字節,對一個漢字占用兩個字節;而varchar的存儲方式是,對每個英文字符占用2個字節,漢字也占用2個字節,兩者的存儲數據都非unicode的字符數據。
char的存取數度還是要比varchar要快得多,因為其長度固定,方便程序的存儲與查找;但是char也為此付出的是空間的代價,因為其長度固定,所以難免會有多余的空格占位符占據空間,可謂是以空間換取時間效率,而varchar是以空間效率為首位的。
char(n)和varchar(n)超出n的范圍時,會截取前面n個字符