注意:
是char(1)与varchar(1)的区别,不是谈char类型与varchar类型的区别
存储方面就不用再谈了,
可以谈谈设计,使用中char(1),varchar(1)的异同点,选用原则,优缺点等以上都是针对长度为1的情况下
是char(1)与varchar(1)的区别,不是谈char类型与varchar类型的区别
存储方面就不用再谈了,
可以谈谈设计,使用中char(1),varchar(1)的异同点,选用原则,优缺点等以上都是针对长度为1的情况下
char(1)
相同点:都是存储一字节字符
不同点:varchar输入的长度为<=1字节,char=1字节(当输入内容小于1字节时会产生1字节的空格)
2.CHAR的效率比VARCHAR2的效率稍高,因为起定长的缘故。
3. char(1)与varchar(1)没什么区别,差异在空格或者非空格了
declare @a varchar(1),@b char(1)
set @a=''
set @b=''
select datalength(@a),datalength(@b)
/*
----------- -----------
0 1(1 行受影响)
*/
定长的用char,比如身份证号(18/15)、手机号(11)、区号(4)员工编号
不定长的用varchar,比如备注等
差不多了吧。。
当海量数据的时候,且数据绝大部分都是定长的话,char 带来的优势马上立竿见影。如:查询性能,数据空间,索引空间,备份时间,备份文件空间,恢复时间。等等
能定长是数据非常非常少
而且如果位数改变就需要涉及到数据表修改
吗
当用户输入A,提交后,又删除A,提交后,varchar(1)是空字符串(oracle中不存在空字符串)
char(1)是1个空格create table ttt(char1 char(1),varchar1 varchar(1))insert ttt select'A','A'
update ttt set char1='',varchar1=''select ascii(char1),ascii(varchar1) from ttt
----------- -----------
32 NULL(所影响的行数为 1 行)
存储方面就不用再谈了,
可以谈谈设计,使用中char(1),varchar(1)的异同点,选用原则,优缺点等那谈什么呢?如果不考虑 存储方面 则没什么可比的了
char与varchar区别LZ已清楚,请LZ将自己考虑的问题列出,使问题更清晰
2、大家说的性能的差异,的确在存储上的开销变长一定是要额外的开销,也就是维护那个偏移,其实对SQL来说这种额外的开销基本可以忽略的,或说在一般系统上这种开销不会造成明显的影响 。如果不是1,那相反变长可能带来性能的提升,IO及缓存命中效率高才是我们想要的。但是你这个是1,并且不明白你的这个列用于什么用途。
3、变长的潜在危险就是可能的页面折分与数据的搬移,这才是一个大的潜在开销。
4、上面有朋友提到IO,那这个还要看你的行大小,如果你这个1对于一个行大小为4048时,IO和缓存一点也得不到提升
5、综上所述,如果你N = 1 ,不要再讨论了