带你随便看看DB2数据库里那些字符串到底是啥玩意儿,怎么用也说不清楚
- 问答
- 2025-12-29 12:28:27
- 3
DB2里处理文字的东西,主要分两大类:一种叫“字符串”,另一种叫“大对象”,咱们今天主要唠唠那些最常用的“字符串”。
定长字符串:CHAR
这个最简单,你可以把它想象成电影院对号入座,你买票的时候,票上写着“8排15座”,这个座位就是固定给你的,不管你来的是个大高个还是个小朋友,这个座位的大小不变。
CHAR就是这么个玩意儿,比如你定义一个列是 CHAR(10),这意味着,无论你往里存什么字,DB2都会给它预留出正好10个字符的位置。
- 如果你存进去的是“Hi”(2个字符),DB2会在后面自动给你补上8个空格,凑满10个字符。
- 如果你不知好歹,非要存“这是一个很长的句子”(超过10个字符),DB2会直接报错,告诉你“对不起,超长了,存不进去”。
CHAR的好处是速度快,因为每个数据长度都一样,DB2找起来方便,但它浪费空间,比如你存一堆很短的名字,后面却跟着一大串空格,它最适合用在那些长度非常固定的数据上,比如身份证号(18位)、性别代码(M‘/’F‘,固定1位)等等。
变长字符串:VARCHAR
这个就更像现实生活中了,比较灵活,它好比是自助餐厅的椅子,有人来了就拉一把椅子坐下,人走了就把椅子收走,不占地方。
VARCHAR就是可变长度的,你定义它为 VARCHAR(100),意思是:“这个字段最多能存100个字符,但具体存多少,按实际的来”。
- 你存“Hello”,它就只占5个字符的空间(DB2会偷偷用一两个字节记下实际长度是5)。
- 你存“Good Morning”,它就占12个字符的空间。
- 只要不超过100个字符,都没问题。
显然,VARCHAR节省空间,现在绝大多数情况下都用它,比如人名、地址、商品描述这些长度千变万化的字段,但因为它长度不固定,DB2管理起来稍微麻烦一丢丢,不过这点开销现在基本可以忽略不计。

这里有个小坑要注意:CHAR和VARCHAR在比较的时候,行为有点不一样,比如一个CHAR(5)的值是‘ABC‘(后面有两个空格),一个VARCHAR(5)的值是‘ABC‘(后面没空格),如果你用等号(=)去比较它俩,DB2会先把CHAR那个值后面的空格去掉再比,所以结果是相等的,但有些更精细的比较操作,可能会因为空格的问题出幺蛾子。
用于存双字节字符的:GRAPHIC
前面说的CHAR和VARCHAR,一个字符通常占一个字节(Byte),这用来存英文字母、数字啥的没问题,但咱们中文、日文这些,一个字就得占俩字节(这叫双字节字符),DB2为了处理这种情况,搞了对应的GRAPHIC类型。
- GRAPHIC:相当于定长的双字节字符串。
GRAPHIC(10),就是预留20个字节的空间,能存最多10个汉字。 - VARGRAPHIC:相当于变长的双字节字符串。
VARGRAPHIC(100),最多能存100个汉字,按实际使用分配空间。
以前数据库字符集设置不完善的时候,用GRAPHIC系列来存中文能避免乱码,但现在DB2的数据库默认都设置为支持Unicode(比如UTF-8)了,直接用VARCHAR就能完美存储全世界几乎所有语言的文字,所以GRAPHIC类型现在用得越来越少了,但你可能会在老系统里见到它。
一种特殊的字符串:CLOB

这个属于“大对象”范畴了,但因为也是存文本的,就顺便提一下,当你的字符串特别特别长,比如要存一篇文章、一份很长的合同文档、一段XML或JSON数据,长度可能超过VARCHAR的上限(通常32KB左右)时,就得用CLOB了。
CLOB的全称是Character Large Object,你可以把它想象成数据库里的一个“文本文件指针”,数据本身可能存在别的地方,数据库里只存一个“地址”和一些关键信息,处理CLOB和处理普通字符串不太一样,通常需要用一些特定的方法来读取和写入。
简单总结一下怎么选:
- 长度死固定的,比如代码、邮编,用 CHAR。
- 长度变化但不太长的,比如名字、标题,用 VARCHAR。
- 要存中文字符,在现代DB2里,用 VARCHAR 就行(确保数据库是UTF-8编码)。
- 要存超长文本,比如几千字的备注,用 CLOB。
最后再说一个实用的小技巧:怎么在DB2里看看一个字段到底是什么类型?你可以查一个叫系统目录视图的东西,想看看某个表(比如叫‘MYTABLE‘)的字段信息,可以执行这个SQL(你可能需要有点权限):
SELECT COLNAME, TYPENAME, LENGTH, SCALE, NULLS FROM SYSCAT.COLUMNS WHERE TABNAME = 'MYTABLE‘
你看结果里的 TYPENAME 列,就能看到是CHAR、VARCHAR还是别的啥了,LENGTH就是定义的长度。
希望这么一说,DB2里这些字符串玩意儿是啥,该怎么用,能清楚一点儿了,它们其实就是数据库给你准备的各式各样的“盒子”,有的盒子大小固定,有的能伸缩,有的专门装大件,根据你要装的东西挑合适的就行。
本文由颜泰平于2025-12-29发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://www.haoid.cn/wenda/70649.html
