13ESQLC中使用VARCHAR数据类型.docx
《13ESQLC中使用VARCHAR数据类型.docx》由会员分享,可在线阅读,更多相关《13ESQLC中使用VARCHAR数据类型.docx(10页珍藏版)》请在冰豆网上搜索。
13ESQLC中使用VARCHAR数据类型
第十三章
ESQL/C中使用VARCHAR数据类型
本章讲述如何使用数据类型VARCHAR。
本章的目标列在上面。
VARCHAR数据类型仅在INFORMIX-OnLine中支持。
使用下面的语法为VARCHAR定义宿主变量:
$varcharHostName[n];
VARCHAR值简单地作为字符数组储存。
当定义VARCHAR宿主变量时,指定数组的大小n,就象定义其它字符类型一样,说明时多定义一个字节以使用空值来结束VARCHAR变量。
数组的大小应当反映变量的最大空间,类似于VARCHAR字段。
同VARCHAR字段所不同的是,不必说明最小空间。
另外,可以使用下面的语法来为VARCHAR定义宿主变量:
$stringHostName[n];
如果把变量定义为STRING类型,它也是一个字符数组。
VARCHAR或STRING宿主变量的值可能有尾部空格。
当这类的值插入到VARCHAR字段中时,这些尾部空格被保留但不会增加。
当把VARCHAR字段的值存放到内存中时,对于所有的宿主变量类型,除了一种以外,数据库服务器保留用户输入的末尾的空格。
当把VARCHAR类型的值存放到STRING宿主变量中时,数据库会去掉所有的尾部空格,仅保留前面的非空格字符。
有时可能需要使用VARCHAR类型的大小参数:
例如,可能想知道要保留多大的缓冲区以存放某个VARCHAR值。
VARCHAR字段的大小信息是以一个编码值存储的,存放在syscolumns目录的字段collength中。
在该编码值中有为VARCHAR字段定义的最大和最小的长度。
在头文件varchar.h中有四个宏,可以简化该编码值的使用:
VCLENGTH(size)
返回VARCHAR类型的宿主数组需要的大小(为存放空值结束符,加上1)。
VCMIN(size)
返回VARCHAR类型的最小长度。
VCMAX(size)
返回VARCHAR类型的最大长度。
VCSIZE(max,min)
返回基于最大长度和最小长度的编码值。
宏的参数size是syscolumns中的编码整数值。
这些宏的定义是:
VCLENGTH(len)(VCMAX(len)+1)
VCMIN(size)(((size)>>8)&0x00ff)
VCMAX(size)((size)&0x00ff)
VCSIZE(max,min)(((min)<<8)&0xff00)+((max)&0x00ff))
作为一个例子,如果想找出VARCHAR字段cat_advert的最大长度,可以使用上面的代码。
在该例子中,我们访问syscolumns系统目录,获得想要的字段的collength值。
然后,使用宏VCLENGTH来抽取在内存中存放cat_advert字段的VARCHAR值所需要的字节数。
该返回值把存放字符数组的空值结束符的一个字节包括在内。
也可以使用VCMAX来得到字段的最大长度。
如果操作的是FIXCHAR类型而不是VARCHAR类型的宿主变量,使用VCMAX会更方便。
当把VARCHAR字段存放到CHAR类型的宿主变量时,下面的规则决定了所涉及到的转换的结果。
●如果源VARCHAR字符串比目的CHAR变量要长,字符串被截断以适合CHAR宿主变量。
如果使用了指示变量,则它的值被设置,以指明发生了截断。
CHAR宿主变量中的字符串以空值结束。
●如果目的CHAR宿主变量比选择的VARCHAR字符串要长,则CHAR宿主变量的末尾用空格来填充,并且,结果字符串以空值结束。
当把VARCHAR字段存放到FIXCHAR类型的宿主变量时,下面的规则决定了所涉及到的转换的结果。
●如果源VARCHAR字符串比目的FIXCHAR宿主变量要长,字符串被截断以适合FIXCHAR宿主变量。
如果使用了指示变量,则它的值被设置,以指明发生了截断。
●如果目的FIXCHAR宿主变量比源VARCHAR字符串要长,则FIXCHAR宿主变量的末尾用空格来填充。
当把VARCHAR字段存放到STRING类型的宿主变量时,下面的规则决定了所涉及到的转换的结果。
●如果源VARCHAR字符串比目的STRING宿主变量要长,字符串被截断以适合STRING宿主变量。
如果使用了指示变量,则它的值被设置,以指明发生了截断。
STRING宿主变量中的字符串以空值来结束。
●如果目的STRING宿主变量比源VARCHAR字符串要长,则把字符串赋给STRING宿主变量,字符串以空值结束。
当把CHAR字段存放到VARCHAR类型的宿主变量时,下面的规则决定了所涉及到的转换的结果。
●如果源CHAR字符串比目的VARCHAR宿主变量要长,字符串被截断以适合VARCHAR宿主变量。
如果使用了指示变量,则它的值被设置,以指明发生了截断。
VARCHAR宿主变量中的字符串以空值来结束。
●如果目的VARCHAR宿主变量比源CHAR字符串要长,则把VARCHAR宿主变量的长度为CHAR字符串的长度,VARCHAR宿主变量中的字符串以空值结束。
换言之,使用上面的例子:
源字段是SQL的CHAR(8)类型,它有八个字符friday。
目的宿主变量是SQLVARCHAR(最大=16)。
一旦把friday存放到VARCHAR宿主变量中,如果针对该值调用stleng()函数,则得到的长度为8。
回答上面的两个问题。
答案
第11页
1.当把VARCHAR字段的值存放到VARCHAR宿主变量中时,数据库服务器保留用户输入的末尾的空格,并以空值来结束字符串。
当把VARCHAR字段的值存放到STRING宿主变量中时,数据库服务器去掉用户输入的末尾的空格,并以空值来结束字符串。
2.给定一个编码值,VCLENGTH和VCSIZE两个宏都可以抽出相关的VARCHAR字段的最大的字节长度。
但是,VCLENGTH会多加上一个字节长度以存放空值结束符。