char(1)和varchar(1)的区别

区别就是char是定长,varchar是变长。


@xman_78tom

varchar(1) 相对 char(1) 不但没有优势,还会拖累性能。

在存储上, varchar 类型需要 2 个字节的额外空间来跟踪存储字符串的长度,这样 varchar(1) 实际占用的是 3 个字节。因此,varchar(1) 要比 char(1) 占用更大的空间,在同等环境下便可能消耗更多的 i/o。这个应该是 varchar 类型的优势,但对 varchar(1) 确实劣势。

在性能上,SQL Server 在处理 char 类型上也要比处理 varchar 快一点(如,某些 update 操作,对 char 类型便是占位更新,而对 varchar 便会造成分页)。这一点网上有很多论述。


@libinlink

选用原则:一般都用varchar,用char需求一变化就要改啦。。。。。


@xys_777

程序判断上稍有区别
当用户输入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 行)

@aitcax

在Mysql中测试,得到结果是:

CREATE TABLE 't_user'(
`char1` CHAR(1) NULL DEFAULT NULL,
`varchar1` VARCHAR(1) NULL DEFAULT NULL
)

update t_user set char1='' ,varchar1='' where u_id=1;
select ascii(char1),ascii(varchar1) from t_user where u_id=1;

mysql> select ascii(char1),ascii(varchar1) from t_user where u_id=1;
+--------------+-----------------+
| ascii(char1) | ascii(varchar1) |
+--------------+-----------------+
|            0 |               0 |
+--------------+-----------------+
可以看到在mysql中,得到的结果都是空字符串,ascii(0)表示空。

附:ascii码特殊字符意义

ASCII 表各特殊字符代表的意义_百度文库



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值