请教:varchar的长度怎么设定比较好?

来自故乡的风 2010-10-18 11:15:46
当我定义varchar字段时,是不是可以简单一点,比如短的一律定义成varchar(20),长的定义成varchar(50),超长的另算。

因为我看到有人定义数据库varchar(3),varchar(5),varchar(11)等很精确,那还不如用char呢,对不对?

进一步说,如果我定义数据库,不管是姓名、电话、地址等,一律定义成varchar(255)(我也看过有人这样做),怎么样?

谢谢回复!


...全文
6179 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
pclion 2010-10-19
  • 打赏
  • 举报
回复
这个,好象varchar定义多大对储存和运行效率没什么影响,各人习惯不同而已
xmp250 2010-10-19
  • 打赏
  • 举报
回复
如果数据量不多,和其它表又没什么关联,又不在乎表设计的高效与否, 随便你怎么定义,能用就行.
hovy_yang 2010-10-19
  • 打赏
  • 举报
回复
根据实际情况吧、一个汉字占几个字节、一个字母占几个字节是固定的、可以在定义之前、大致估算一下、然后定义合适的
来自故乡的风 2010-10-19
  • 打赏
  • 举报
回复
多谢各位。这么多回帖让本人受益匪浅!

追加了一些分数结帐。
feilniu 2010-10-19
  • 打赏
  • 举报
回复
一般来说:
完全确定长度的,如邮编、股票代码、手机号码号段(前3位或前7位)、等等,可以用char。除此之外都用varchar。
即,char类型用来表示各种已知定义的code,而varchar类型用来表示各种string。

varchar的长度,最好是在够用(需要适当预测未来需求)且方便管理的前提下尽可能短。因为SQLServer的最大索引键是900字节,在一个varchar(1000)或两个varchar(500)的字段上建索引,可能会导致数据异常。严格约束长度,则能避免这种可能性。

另外,同一个字段,在整个系统中应该保证数据类型(包括长度)一致和字段名尽量一致。比如一个EmployeeID,在所有包含该字段的表中都应该是同样的varchar(30),并且名称都应该尽量是EmployeeID,除非是ManagerID、OwnerEmployeeID这种表示其它含义的情况。这样可以最大限度避免混淆,方便管理。

至于非英文字符,是选择nchar/nvarchar还是char/varchar主要看个人倾向和系统集成的需求。只是要知道一点,用varchar+代码页的机制存储中文字符(DBCS),可能会遇到许多意想不到的麻烦。
feilniu 2010-10-19
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 sqlcenter 的回复:]

够用即可

不管是姓名、电话、地址等,一律定义成varchar(255)(我也看过有人这样做)
-------------
那个人应该一律定义为varchar(250)
[/Quote]

这种表估计是从Excel中导入SQLServer时创建的。
njlywy 2010-10-19
  • 打赏
  • 举报
回复
按需分配吧…
SQLCenter 2010-10-19
  • 打赏
  • 举报
回复
够用即可

不管是姓名、电话、地址等,一律定义成varchar(255)(我也看过有人这样做)
-------------
那个人应该一律定义为varchar(250)
jenny0810 2010-10-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 acupofnescafe 的回复:]
用char的话,得注意如果字符长度不到char规定的长度,末尾有空格的问题。另外,如果用char的话,最好整个数据库里字符字段都用char。
[/Quote]study
王向飞 2010-10-19
  • 打赏
  • 举报
回复

凡事不能过度,适当够用就好。
Mr_Nice 2010-10-19
  • 打赏
  • 举报
回复
[Quote=引用楼主 torontosky 的回复:]
当我定义varchar字段时,是不是可以简单一点,比如短的一律定义成varchar(20),长的定义成varchar(50),超长的另算。

因为我看到有人定义数据库varchar(3),varchar(5),varchar(11)等很精确,那还不如用char呢,对不对?

进一步说,如果我定义数据库,不管是姓名、电话、地址等,一律定义成varchar(255)(我也看过有人这样做),怎么……
[/Quote]

具体应用得具体问题具体分析,一概而论的方法不太适用。

长度的选择一般与字段的含义有关联。
比如移动电话号码 varchar(11) 邮编 varchar(6)等
999朵玫瑰 2010-10-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dawugui 的回复:]
引用楼主 torontosky 的回复:
当我定义varchar字段时,是不是可以简单一点,比如短的一律定义成varchar(20),长的定义成varchar(50),超长的另算。

因为我看到有人定义数据库varchar(3),varchar(5),varchar(11)等很精确,那还不如用char呢,对不对?

进一步说,如果我定义数据库,不管是姓名、电话、地址等,一律定义成varc……
[/Quote]up
  • 打赏
  • 举报
回复
数据库中,如果数据量大而且字段赋予字节太大,会让查询时速度很慢。
claro 2010-10-19
  • 打赏
  • 举报
回复
与应用有关,与实际情况有关。

选择合适的。
幸运的意外 2010-10-19
  • 打赏
  • 举报
回复
用char的话,得注意如果字符长度不到char规定的长度,末尾有空格的问题。另外,如果用char的话,最好整个数据库里字符字段都用char。
kiruya0 2010-10-19
  • 打赏
  • 举报
回复
varchar(max)最好用
playboy080716 2010-10-19
  • 打赏
  • 举报
回复
个人爱好!根据不同的情况定义不同的长度!!
dawugui 2010-10-18
  • 打赏
  • 举报
回复
[Quote=引用楼主 torontosky 的回复:]
当我定义varchar字段时,是不是可以简单一点,比如短的一律定义成varchar(20),长的定义成varchar(50),超长的另算。

因为我看到有人定义数据库varchar(3),varchar(5),varchar(11)等很精确,那还不如用char呢,对不对?

进一步说,如果我定义数据库,不管是姓名、电话、地址等,一律定义成varchar(255)(我也看过有人这样做),怎么……
[/Quote]
姓名 varchar(50)或更少,varchar(20)即可,如果考虑少数民族,可以稍微长点.
电话 varchar(11)即可.考虑多个电话,可以稍微长点.
地址 根据实际情况定.

所以,需要不同的情况来考虑,不是千篇一律.
SQL2088 2010-10-18
  • 打赏
  • 举报
回复
算是一种习惯吧

比如,姓名,谁的姓名会有255/2=122 个字符? 所以也必要定义那么长,但又不能定义成CHAR()

所以就定义如VARCHAR(30)

34,837

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧