涉及不完整字符的错误

如果可以通过防止子串连接重建原始逻辑字符串的任何方式来处理子串字符串或将其呈现给用户,不完整字符即会违反关系模型。

当多字节字符具有的子串其本身为有效的字符时,可能会发生这种情况。例如:假定多字节代码集包含四个字节的字符 A1A2A3A4(表示数字 1)和三个字节的字符 A2A3A4(表示数字 6)。同时假定在您执行以下查询时,语言环境正在使用该多字节代码集:
SELECT multi_col FROM tablename WHERE multi_col[2,4] = 'A
2A3A4'

数据库服务器将 multi_col[2,4] 解释为有效的三个字节字符(多字节 6),而不是有效的四个字节字符的子串 ('sss')。

因此,WHERE 子句包含下列条件:
WHERE '6' = '6'

不完整字符不会出现在单字节代码集中,因为每个字符均以单字节的形式存储。如果数据库语言环境支持单字节代码集,并且您在查询中指定了列子串,那么查询会正确地返回请求的数据子集;不会用空格替换任何字符。