还是CHAR和VARCHAR问题

ytzyf 2003-08-22 09:21:17

char(10)  长度为固定长度
varchar(10) 存储大小为输入数据的的实际长度

为什么不都用varchar呢?还节省空间,存储实际长度。

例如
cName char(10)
vName varchar(10)

完全可以用varchar(10),为什么很多书上例子都是用char(10)?
...全文
50 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiangchuandong 2003-08-23
  • 打赏
  • 举报
回复
gz,
to:Rayfly(小鸡快跑) ,varchar也可以做到呀
个人认为varchar比char好用多了
z5wjz 2003-08-23
  • 打赏
  • 举报
回复
varchar数据类型虽然可以节省磁盘空间,但存在降低性能的隐患,举个简单的例子:一张表上有一列为通讯地址,因为长度相差比较大,所以只好选择varchar或nvarchar数据类型,假设长度为80,而如果有一个人的通讯地址开始时只输入了"北京市"三个字,则这个人的地址一列只占用了6个字节.
数据库中的数据是以页的形式存储的,一页为8K字节,假设存储上面那个人的那行记录的页刚好存满,页面上已无可用空间或可用空间非常小,并且后来要修改这个人的地址,改成一个比较长的数据,如:北京市宣武区某某街道某某胡同某某号,此时就会出现问题了,因为存储该条记录的页已被占满,所以只好将该条记录从这一页上删除,将其修正后的结果存到另一可用页上,而为了仍然能够找到该数据,需要在原始位置加一个指针,指向现在的数据存储位置.如果类似操作过多,会在表上生成大量的数据指针,很明显会降低性能.(当然了,可以通过其他方法来将其优化,这里只是一个小小的例子而已)
上述所产生的现象虽然不能完全归罪于varchar数据类型,但也跟他有着密切的关系,因为如果采用定长数据类型就不会出现这样的问题.
所以在可以使用定长数据类型时尽量使用,而变长数据类型请尽量在数据长度变化较大时采用.
Rayfly 2003-08-23
  • 打赏
  • 举报
回复
比如说一个单位的资产编号定义是:“xxxx0000xx”,这就需要数据长度一致啦
sdhdy 2003-08-23
  • 打赏
  • 举报
回复
在下认为:
如果数据长度可以确定的话,用char比较好,可以节省存储开支
如果数据长度不定的话,用varchar比较好,可以存储实际长度,但未必可以节省存储空间。
ytzyf 2003-08-23
  • 打赏
  • 举报
回复
up
ytzyf 2003-08-22
  • 打赏
  • 举报
回复
请问,数据长度一致有什么用处吗??
zhaoloudy 2003-08-22
  • 打赏
  • 举报
回复
补充:一般来说,服务器操作char比varchar要快。
nboys 2003-08-22
  • 打赏
  • 举报
回复
用char类型,保证所有的数据长度都一致,比如char(10),那么长度都是十

用varchar类型,可以节省空间
ytzyf 2003-08-22
  • 打赏
  • 举报
回复
如果希望列中的数据值大小接近一致,请使用 char。
如果希望列中的数据值大小显著不同,请使用 varchar。

什么意思??不太明白
hjb111 2003-08-22
  • 打赏
  • 举报
回复
char 和 varchar
固定长度 (char) 或可变长度 (varchar) 字符数据类型。

char[(n)]

长度为 n 个字节的固定长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为 n 个字节。char 在 SQL-92 中的同义词为 character。

varchar[(n)]

长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。所输入的数据字符长度可以为零。varchar 在 SQL-92 中的同义词为 char varying 或 character varying。

注释
如果没有在数据定义或变量声明语句中指定 n,则默认长度为 1。如果没有使用 CAST 函数指定 n,则默认长度为 30。

将为使用 char 或 varchar 的对象被指派数据库的默认排序规则,除非用 COLLATE 子句另外指派了特定的排序规则。该排序规则控制用于存储字符数据的代码页。

支持多语言的站点应考虑使用 Unicode nchar 或 nvarchar 数据类型以尽量减少字符转换问题。如果使用 char 或 varchar:

如果希望列中的数据值大小接近一致,请使用 char。
如果希望列中的数据值大小显著不同,请使用 varchar。
如果执行 CREATE TABLE 或 ALTER TABLE 时 SET ANSI_PADDING 为 OFF,则一个定义为 NULL 的 char 列将被作为 varchar 处理。

当排序规则代码页使用双字节字符时,存储大小仍然为 n 个字节。根据字符串的不同,n 个字节的存储大小可能小于 n 个字符。

34,587

社区成员

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

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