我的疑问是varchar类型为什么不向char类型那样如果存的字符串小于最大长度会用空格填充?
假如我有一个字段是varchar(100)类型的,最开始存入的是‘abc’,后来更新成为‘abfjdhfadsfsdoihfsofhadhohfodsh’,一个很长的字符串,是不是有可能导致数据更新后这条数据行溢出当前的数据页?
我的疑问是varchar类型为什么不向char类型那样如果存的字符串小于最大长度会用空格填充?
假如我有一个字段是varchar(100)类型的,最开始存入的是‘abc’,后来更新成为‘abfjdhfadsfsdoihfsofhadhohfodsh’,一个很长的字符串,是不是有可能导致数据更新后这条数据行溢出当前的数据页?
如果varchar要像char那样,那就不需要varchar了,varchar是可变长度,char是固定长度,可变长度如果用空格填充,那和固定长度就没区别了。更新的字符串过长,如果超出了限制的长度会被截断
15 回答8.4k 阅读
8 回答6.2k 阅读
4 回答4.4k 阅读✓ 已解决
5 回答3.2k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
1 回答2.9k 阅读✓ 已解决
字段数据量太大时,确实有可能出现溢出数据页情况,通常数据库引擎会用独立块来存储,除了空间浪费,效率也会降低不少
char 预先分配固定空间的方式,如果预到大量不定长的数据时,在一定程度上也是一种资源浪费。而大量不定长数据在varcahr 下得到了压缩,存储空间远小于char 时,io 性能优势就突显出来了