社区
应用实例
帖子详情
关于变长字类型和定长类型的区别
computerstarveling
2003-09-13 09:05:55
定长类型和变长类型有什么区别,各有什么优点和缺点,大家谈谈自己的看法吧.
...全文
359
10
打赏
收藏
关于变长字类型和定长类型的区别
定长类型和变长类型有什么区别,各有什么优点和缺点,大家谈谈自己的看法吧.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
a1n1
2003-10-04
打赏
举报
回复
1
以前好用varchar的,不知道效率上有什么区别,
现在看了各位的解释感觉还是要看情况
伍子V5
2003-10-03
打赏
举报
回复
1
char是定长字符类型,速度快
varchar是变长字符类型,空间小
其实我们应该有这么一个思想
如果你要用varchar,实际字符长度由计算机判断,那就肯定要消耗更多的时间
所以在设计中如果我们自己能够确定的事
千万不要让计算机去做
肯定会消耗更多的时间
pengdali
2003-10-03
打赏
举报
回复
1
一般做主键用char,具体用什么要看你的情况。对于变化小的数据尽量使用char。
txlicenhe
2003-10-03
打赏
举报
回复
1
基本能确定长度,且长度相对固定的字段如:单号,编号之类的用定长
否则用变长,如:备注(太长要用text),规格说明之类,占用空间少。
welyngj
2003-10-03
打赏
举报
回复
char虽然需要更多的硬盘空间。但速度快
wzh1215
2003-09-14
打赏
举报
回复
varchar类型会占用系统资源,应尽量少用!
zjcxc
2003-09-14
打赏
举报
回复
变长一般用来保存数据长度不固定的数据.占用的存储空间跟所保存的数据的长度一致
定长一般用来保存数据长度固定的数据.占用的存储空间与字段定义的长度致
happy_0325
2003-09-14
打赏
举报
回复
在你的值的位数比较确定的时候用char
变化比较大的时候用varchar
computerstarveling
2003-09-13
打赏
举报
回复
可是听说varchar类型的会占系统资源,可我想知道比较确切的情况,比如到底会多占多少,影响系统运行是否有一个边界限度,最好在哪种情况下用或者不用.
CrazyFor
2003-09-13
打赏
举报
回复
如果你是固定长度的数据就用CHAR类型,如果要保存的数据只能确定它的最大长度时,就用VARCHAR.
保存方式:
CHAR类型:总是占用固定长度的字节数,当数据不足长度时后面补空格.
VARCHAR类型:总是占用数据长度加1个字节数.
深入SQL Server中
定长
char(n)与
变长
varchar(n)的
区别
详解
char(n)是
定长
格式,格式为char(n)的
字
段固定占用n个
字
符宽度,如果实际存放的数据长度超过n将被截取多出部分,如果长度小于n就用空
字
符填充。 varchar(n)是
变长
格式,这种格式的
字
段根据实际数据长度分配空间,不浪费对于的空间,但是搜索数据的速度会麻烦一点。 一般地说,只要一个表有一个
字
段定义为varchar(n)
类型
,那么其余用char(n)定义的
字
段实际上也是varchar(n)
类型
。 如果你的长度本身不长,比如就3~10个
字
符,那么使用char(n)格式效率比较高,搜索速度快。但是如果有的数据很长,有的数据有比较短,比如注册用户的简介这样的
字
段,实在没有办法,而且很在乎浪费
数据库设计的性能与效率.docx
字
段结构 允许NULL值的
字
段,数据库在进行比较操作时,会先判断其是否为NULL,非NULL时才进行值的必对。因此基于效率的考虑,所有
字
段均不能为空,即全部NOT NULL; 预计不会存储非负数的
字
段,例如各项id、发帖数等,必须设置为UNSIGNED
类型
。UNSIGNED
类型
比非UNSIGNED
类型
所能存储的正整数范围大一倍,因此能获得更大的数值存储空间; 存储开关、选项数据的
字
段,通常使用tinyint(1)非UNSIGNED
类型
,少数情况也可能使用enum()结果集的方式。tinyint作为开关
字
段时,通常1为打开;0为关闭;-1为特殊数据,例如N/A(不可用);高于1的为特殊结果或开关二进制数组合(详见Discuz!中相关代码); MEMORY/HEAP
类型
的表中,要尤其注意规划节约使用存储空间,这将节约更多内存。例如cdb_sessions表中,就将IP地址的存储拆分为4个tinyint(3) UNSIGNED
类型
的
字
段,而没有采用char(15)的方式; 数据库设计的性能与效率全文共6页,当前为第1页。任何
类型
的数据表,
字
段空间应当本着足够用,不浪费的原则,数值
类型
的
字
段取值范围见下表: 数据库设计的性能与效率全文共6页,当前为第1页。
字
段
类型
存储空间(b) UNSIGNED 取值范围 tinyint 1 否 -128~127 是 0~255 smallint 2 否 -32768~32767 是 0~65535 mediumint 3 否 -8388608~8388607 是 0~16777215 int 4 否 -2147483648~2147483647 是 0~4294967295 bigint 8 否 -9223372036854775808~9223372036854775807 是 0~18446744073709551615 SQL语句 所有SQL语句中,除了表名、
字
段名称以外,全部语句和函数均需大写,应当杜绝小写方式或大小写混杂的写法。例如select * from cdb_members;是不符合规范的写法。 很长的SQL语句应当有适当的断行,依据JOIN、FROM、ORDER BY等关键
字
进行界定。 通常情况下,在对多表进行操作时,要根据不同表名称,对每个表指定一个1~2个
字
母的缩写,以利于语句简洁和可读性。 如下的语句范例,是符合规范的: $query = $db->query("SELECT s.*, m.* FROM {$tablepre}sessions s, {$tablepre}members m WHERE m.uid=s.uid AND s.sid='$sid');
定长
与
变长
表 包含任何varchar、text等
变长
字
段的数据表,即为
变长
表,反之则为
定长
表。 对于
变长
表,由于记录大小不同,在其上进行许多删除和更改将会使表中的碎片更多。需要定期运行OPTIMIZE TABLE以保持性能。而
定长
表就没有这个问题; 如果表中有可
变长
的
字
段,将它们转换为
定长
字
段能够改进性能,因为
定长
记录易于处理。但在试图这样做之前,应该考虑下列问题: 使用
定长
列涉及某种折衷。它们更快,但占用的空间更多。char(n)
类型
列的每个值总要占用n 个
字
节(即使空串也是如此),因为在表中存储时,值的长度不够将在右边补空格; 而varchar(n)
类型
的列所占空间较少,因为只给它们分配存储每个值所需要的空间,每个值再加一个
字
节用于记录其长度。因此,如果在char和varchar
类型
之间进行选择,需要对时间与空间作出折衷;
变长
表到
定长
表的转换,不能只转换一个可
变长
字
段,必须对它们全部进行转换。而且必须使用一个ALTER TABLE语句同时全部转换,否则转换将不起作用; 数据库设计的性能与效率全文共6页,当前为第2页。有时不能使用
定长
类型
,即使想这样做也不行。例如对于比255
字
符更长的串,没有
定长
类型
; 数据库设计的性能与效率全文共6页,当前为第2页。 在设计表结构时如果能够使用
定长
数据
类型
尽量用
定长
的,因为
定长
表的查询、检索、更新速度都很快。必要时可以把部分关键的、承担频繁访问的表拆分,例如
定长
数据一个表,非
定长
数据一个表。例如Discuz!的cdb_members和cdb_memberfields表、cdb_forums和cdb_forumfields表等。因此规划数据结构时需要进行全局考虑; 进行表结构设计时,应当做到恰到好处,反复推敲,从而实现最优的数据存储体系。 运算与检索 数值运算一般比
字
符串运算更快。例如比较运算,可在单一运算中对数进行比较。而串运算涉及几个逐
字
节的比较,如果串更长的话,这种比较还要多。 如果串列的值数目有限,应该利用普通整型或emum
类型
来获得数值运算的优越性。 更小的
字
基于SQL Server中char,nchar,varchar,nvarchar的使用
区别
对于程序中的一般
字
符串
类型
的
字
段,SQL Server中有char、varchar、nchar、nvarchar四种
类型
来对应,那么这四种
类型
有什么
区别
呢,这里做一下对比。 1.
定长
或
变长
所谓
定长
就是长度固定,当要保存的数据长度不够时将自动在其后面填充英文空格,使长度达到相应的长度;有var前缀的,表示是实际存储空间是动态变化的,比如varchar,nvarchar
变长
字
符数据则不会以空格填充。 2.Unicode或非Unicode 数据库中,英文
字
符只需要一个
字
节存储就足够了,但汉
字
和其他众多非英文
字
符,则需要两个
字
节存储。如果英文与汉
字
同时存在,由于占用空间数不同,容易造成混乱,导致读取
ORACLE_PLSQL_基础教程
变量
类型
binary_integer: 整数,主要用来计数而不是用来表示
字
段
类型
number 数
字
类型
char
定长
字
符串 varchar2
变长
字
符串 date 日期 long 长
字
符串,最长2G boolean 布尔
类型
,可以取值为true,false ,和null。
MySQL笔记之数据
类型
详解
字
符型数据
字
符型数据可以使用
定长
或
变长
的
字
符串来实现,其不同点在于固
定长
度的
字
符串使用空格向右填充,以保证占用同样的
字
节数;
变长
字
符串不需要向右填充,并且所有
字
节数可变。 char
定长
型,
字
节长度固定,最大长度为255
字
节,可以使用char(20)这种方式限
定长
度,查询速度快,但不灵活 varchar
变长
型,
字
节长度随数据量变化,最多可存储65535
字
节,varchar(20)可以限
定长
度,查询速度不及char,但使用灵活 如果需要存储文本或者文档,需要使用text
类型
数据,包括四种 tinytext
应用实例
27,579
社区成员
68,558
社区内容
发帖
与我相关
我的任务
应用实例
MS-SQL Server 应用实例
复制链接
扫一扫
分享
社区描述
MS-SQL Server 应用实例
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章