char 和 varchar的区别是啥???

handsomerun 2006-11-07 05:33:02
declare @aa varchar(25)

declare @bb int
select @aa = '000000000010'

select @bb = LEN(@aa)

select @bb

这样返回的是12,就是实际有多少个char 元素


declare @aa char(25)

declare @bb int
select @aa = '000000000010'

select @bb = LEN(@aa)

select @bb

这样返回的是25,
请问为什么有这样的差异,他们还有别的差异吗??
...全文
4953 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
happyer 2006-11-14
  • 打赏
  • 举报
回复
char(n)固定长度,因此读写效率较高。
varchar(n)是根据内容决定存储长度,肯定要消耗相关计算的时间。

至于varchar中n的取值多少是否对效率的影响不同,我的考虑是:有区别。
毕竟程序要先开辟n个BYTE的空间,然后再根据实际缩短,可能会影响到存储空间的管理和调配。否则,微软做varchar就没必要给出自定义长度的功能了。相信微软自有道理。

个人观点。
sharelove 2006-11-14
  • 打赏
  • 举报
回复
K我试啦下两种结果返回的都是12啊!
losedxyz 2006-11-11
  • 打赏
  • 举报
回复
read
njtucomputer 2006-11-11
  • 打赏
  • 举报
回复
学习
wengyu100 2006-11-11
  • 打赏
  • 举报
回复
关注
phommy 2006-11-10
  • 打赏
  • 举报
回复
借地提个问题:

在位数都足够的情况下,varchar(100)和varchar(1000)的时间空间效率是否完全一样?

如果完全一样,那以后所有的varchar都声明成最大的长度了,因为“在位数都足够的情况下”的假设不一定可以保证~
root_th 2006-11-10
  • 打赏
  • 举报
回复
read
Jonly 2006-11-10
  • 打赏
  • 举报
回复
Mark......
jeal_zhang 2006-11-09
  • 打赏
  • 举报
回复
declare @aa char(25),@bb varchar(25)

set @aa = '10'
set @bb = '10'
select len(@aa) length_a,len(@bb) length_b
---------------------------------------------
length_a length_b
2 2
lanyur 2006-11-09
  • 打赏
  • 举报
回复
mark
penglewen 2006-11-09
  • 打赏
  • 举报
回复
vchar 更灵活啊,节省存储空间,所以我一般用这种类型...
happyer 2006-11-09
  • 打赏
  • 举报
回复
declare @aa varchar(15)
declare @aaa char(15)
declare @bb int
declare @bbb int
declare @cc char(1)

set @aa = '1234567890'
set @aaa = '1234567890'
set @cc = 'e'

set @bb = len(@aa+@cc)
set @bbb = len(@aaa+@cc)
select @bb
select @bbb

这个例子可以说明问题。
在每个变量后面加一个字符,使len()不截断空格。
happyer 2006-11-09
  • 打赏
  • 举报
回复

LEN函数
返回给定字符串表达式的字符(而不是字节)个数,其中不包含尾随空格。

这是原因。
其实变量本身在char和varchar长度是不同的.
robin_yao 2006-11-09
  • 打赏
  • 举报
回复
为什么我执行
declare @aa char(25)
declare @bb int
select @aa = '000000000010'
select @bb = LEN(@aa)
select @bb
这个还是12呢?
我是在sql server 2k下
方健的专栏 2006-11-09
  • 打赏
  • 举报
回复
楼主,告诉你一个小窍门:
一般数据的长度不经常发生变化时用char,例如:性别

如果经常发生变化就用varchar,例如:姓名

char是定长的,空间不会改变,但效率高
varchar是变长的,可以节省内存空间,但是降低效率
yangyangxie 2006-11-09
  • 打赏
  • 举报
回复
专业课堂啊,哈哈
yesyesyes 2006-11-09
  • 打赏
  • 举报
回复
LEN
返回给定字符串表达式的字符(而不是字节)个数,其中不包含尾随空格。

语法
LEN ( string_expression )

参数
string_expression

要计算的字符串表达式。

返回类型
int

lsd1025 2006-11-09
  • 打赏
  • 举报
回复
不过前面人关于char 和 varchar讨论区别很正确
lsd1025 2006-11-09
  • 打赏
  • 举报
回复
楼上说的有理我在SQL2K下
declare @aa varchar(25)
declare @bb int
select @aa = '000000000010'
select @bb = LEN(@aa)
select @bb
这样返回的是12,
declare @aa char(25)
declare @bb int
select @aa = '000000000010'
select @bb = LEN(@aa)
select @bb
这样返回的是12,
‘===============
都是12,可能是用了len()返回给定字符串表达式的字符(而不是字节)个数,其中不包含尾随空格。相当于trim(expression)了吧,楼主怎么结果不同呢?

jun_01 2006-11-09
  • 打赏
  • 举报
回复
declare @str char(100)
set @str='abc'

select len(@str)

这个结果是多少?不是100,而是3!
为啥?因为len函数是忽略文本后的空格的!


LEN
返回给定字符串表达式的字符(而不是字节)个数,其中不包含尾随空格。

语法
LEN ( string_expression )

参数
string_expression

要计算的字符串表达式。

返回类型
int
加载更多回复(17)

34,590

社区成员

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

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