为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:8
【操作系统】:
【CPU】:
【问题描述】*:GB18030字符集的汉字编码范围是多少?
可以查出字段中含中文字符
select * from “SYSDBA”.“TEST2” where asciistr(name) like ‘%\%’
select * from “SYSDBA”.“TEST2” where name<>REGEXP_REPLACE(name,‘[^0-9A-Za-z]+’, ‘’)
GB18030编码范围
Single-byte: 00-80 (*)
Two-byte: 81-fe | 40-7e, 80-fe
Four-byte: 81-fe | 30-39 | 81-fe | 30-39
精确判断的方法为,由于ASCII(单字节)与汉字其起始字节范围不重叠,可以通过形如while(*content != ‘\0’)的逻辑遍历指针指向每个字节的编码进行比对,当不符合单字节范围时按2字节匹配后续字节,仍不匹配则按4字节,以此类推
粗略判断的方法为,通过char_length和lengthb的数值比较,不等即不全为单字节字符,等于倍数则需必定包含2/4字节汉字
或将精确算法进行反向匹配,排除所有在ASCII范围之内的内容则必定包含其他两种(不考虑乱码导致的异常)
用正则表达式判断
简单的判断可以用length和lengthb来做判断,length返回的是字符数,lengthb返回的是字节数,英文字符只占一个字节,中文字符占2个多个字节 length(col1) != lengthb(col1) 说明col1列中有中文或者全角符号