日期:2014-05-18  浏览次数:20468 次

char还是varchar?
我在设计数据库,其中有一个数据表的字段已知为固定长的3位代码,那么我把它的类型定义为char(3)好呢?还是定义为varchar(10)好呢?

目前已知3位固定长,不知道以后会不会有变动。

------解决方案--------------------
varchar(10)

char--不足位以空格填佔空間
------解决方案--------------------
探讨
我在设计数据库,其中有一个数据表的字段已知为固定长的3位代码,那么我把它的类型定义为char(3)好呢?还是定义为varchar(10)好呢?

目前已知3位固定长,不知道以后会不会有变动。

------解决方案--------------------
char [ ( n ) ] 
這些是長度為 n 位元組的固定長度非 Unicode 字元資料。n 必須是 1 到 8,000 的值。儲存體大小是 n 位元組。char 的 SQL-2003 同義字是 character。

varchar [ ( n | max ) ] 
可變長度,非 Unicode 字元資料。n 可以是 1 到 8,000 的值。max 表示最大儲存體大小是 2^31-1 位元組。儲存體大小是輸入資料的實際長度再加上 2 位元組。輸入的資料長度可以是 0 字元。varchar 的 SQL-2003 同義字是 char varying 或 character varying。

------解决方案--------------------
很固定的话

char(3)
------解决方案--------------------

建議樓主用nvarchar--unicode支持多語言環境
------解决方案--------------------
探讨
引用:
我在设计数据库,其中有一个数据表的字段已知为固定长的3位代码,那么我把它的类型定义为char(3)好呢?还是定义为varchar(10)好呢?

目前已知3位固定长,不知道以后会不会有变动。

如果仅仅是十来个,都一样.

------解决方案--------------------
char(3) 因为知道它的长度,因为char是固定长度,查询速度也非常高,便于优化。
------解决方案--------------------
Varchar 的类型不以空格填满,比如varchar(100),但它的值只是"qian",则它的值就是"qian"
而char 不一样,比如char(100),它的值是"qian",而实际上它在数据库中是"qian "(qian后共有96个空格,就是把它填满为100个字节)。
由于char是以固定长度的,所以它的速度会比varchar快得多!但程序处理起来要麻烦一点,要用trim之类的函数把两边的空格去掉!


------解决方案--------------------
长度是固定的话 用char(3)
------解决方案--------------------
看了以上各位的讨论,我帮楼主再加一个疑问,呵呵

如果现在使用了char(3)一段时间后,可以直接改字段的类型为char(4)吗?




------解决方案--------------------
探讨

看了以上各位的讨论,我帮楼主再加一个疑问,呵呵

如果现在使用了char(3)一段时间后,可以直接改字段的类型为char(4)吗?

------解决方案--------------------
如果确定以后3位长度不会变就Char(3),否则就用varchar(10)

两者在存储方式和性能上有差别,Char存储效率高,为固定长度,用varchar会慢一些,
如果现在使用char(3),以后有增加时再改为char(4)也可以,不足4位的会自动补空格。
------解决方案--------------------
如果很确定仅3位建议char(3),查询效率会好些
不确定用varchar,长度写长点