在5.2版本中如果使用SQL建表并制定字段属性为CCSID 65535,是可以使用中文的模糊查询的但如果使用DDS建表,利用field level keyword来制定字段属性为CCSID
(65535),则无法使用中文的模糊查询,原因是0E/0F控制码也被当作普通字符使用。
例如
R TEST
--NAME --A(20)-- CCSID(65535)
建立PF文件QGPL/TEST
INSERT INTO QGPL/TEST VALUES('中华人民共和国')
使用QUERY进行模糊查询
SELECT * FROM QGPL/TEST WHERE NAME LIKE '中%‘
系统返回0行纪录
如果要实现对65535字段的模糊查询,必须修改QUERY的写法:
SELECT * FROM QGPL/TEST WHERE HEX(NAME) LIKE SUBST(HEX('中'),1,3)||'%'
返回的结果为
--------中华人民共和国
返回结果正确。
这里充分考虑了在单字节环境下对简体中文的处理过程,即把一个双字节字符(加上0E/0F控制码)当作4个字节来处理,而这些字节包含的数据是无法在单字节环境下正确解析的。所以,必须使用16进制的方式来处理。
如果用户要检索的是“中华“,则检索的条件必须写成:
SELECT * FROM QGPL/TEST WHERE HEX(NAME) LIKE SUBST(HEX('中'),1,5)||'%'
因为0E/0F只出现在双字节字符串的开头和结尾,所以两个汉字需要检索的字符个数是5个。