Oracle VARCHAR2列无效字符排查:识别被替换为¿的字符
识别Oracle VARCHAR2列中被替换为\00BF的字符
\00BF对应Unicode字符U+00BF(倒置问号¿),它是Oracle对无法被当前数据库字符集识别的字符的替换标记,并非原始字符本身。- 定位原始字符的步骤:
- 先查询数据库当前使用的字符集:
SELECT value FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET'; - 提取含替换标记的字段原始字节值,对照字符集编码规则反推原字符:
将语句中的SELECT name, RAWTOHEX(UTL_I18N.STRING_TO_RAW(name, '你的字符集名称')) AS raw_bytes FROM your_table WHERE asciistr(name) LIKE '%\00BF%';你的字符集名称替换为第一步查询到的结果(如AL32UTF8、ZHS16GBK),拿到原始字节后,对应字符集的编码表即可找到原本无法识别的字符。
- 先查询数据库当前使用的字符集:
- 数据采集阶段的排除方案:
- 若明确原字符的编码范围,可在采集时直接过滤该范围的字符;
- 若暂时无法确定原字符,可在采集环节添加预校验,模拟Oracle的
ASCIISTR逻辑,提前剔除会被替换为\00BF的非兼容字符。
内容的提问来源于stack exchange,提问作者Prabhat Mangina
相关产品推荐
相关产品推荐

