一个专注于大数据技术架构与应用分享的技术博客

db2中varchar与long varchar类型的区别

昨天工作中遇到需要存储长度为32700个字符的字段,很明显,VARCHAR类型是不够用的,因为VARCHAR类型最多只能存储32672个字段。

于是改用LONG VARCHAR(32700),结果在建表时一直报莫名的错误。最后排查了很久,才发现是因为LONG VARCHAR类型不需要指定字符串的长度,而使用默认最大长度为32700。去掉LONG VARCHAR后的字符长度限定后,建表成功。

后面上网查了下VARCHAR与LONG VARCHAR,才了解到,区别还不仅仅是这些。

我们都知道,对于DB2来说,在创建表空间前,会先创建一个BUFFERPOOL(缓冲池)。BUFFERPOOL会有固定的PAGE SIZE(页大小),常用的用4K、8K、16K、32K。而创建表空间时,会指定使用哪一个BUFFERPOOL。这个BUFFERPOOL的PAGE SIZE就决定了表空间的PAGE SIZE。

这个PAGE SIZE,在一般情况下,我们是不太需要关心的。但在创建表时,表中所有字段的字段类型(比如DATE、INTEGER、VARCHAR、DECIMAL等)占用的字节长度之和,不可以超过这个PAGE SIZE的大小,否则会报错。

而除了上面LONG VARCHAR在定义时,不需要指定长度外,LONG VARCHAR还不会占用PAGE SIZE的大小。也就是说,在判断表中所有字段的字段类型占用的字节长度之和是否超过PAGE SIZE大小时,LONG VARCHAR类型是不计算在内的。也就是说,LONG VARCHAR类型字段的值,在操作时,是不经过BUFFER POOL的。

另外,LONG VARCHAR类型的字段,在使用时,还有不少的限制。在下面的SQL子句中是不允许使用LONG VARCHAR的:

  • DISTINCT
  • GROUP BY
  • ORDER BY
  • BETWEEN/IN
  • LIKE
  • 子查询内部
  • 列函数中
赞(1)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《db2中varchar与long varchar类型的区别》
文章链接:https://macsishu.com/db2%e4%b8%advarchar%e4%b8%8elong-varchar%e7%b1%bb%e5%9e%8b%e7%9a%84%e5%8c%ba%e5%88%ab
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。