Sqlplus查询结果无法正确显示日语等特殊字符问题求助
sqlplus 12连接Oracle 12c日语显示异常排查步骤
- 第一步:确认数据库端字符集配置
执行SQL查询数据库原生字符集:
如果数据库字符集为AL32UTF8等非JA16SJISTILDE的字符集,需将客户端NLS_LANG修改为与数据库端一致的配置,而非强制指定JA16SJISTILDESELECT * FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET'; - 第二步:校验命令行窗口活动代码页
启动cmd后先执行chcp查看当前代码页,日语Shift-JIS对应代码页为932,若返回值不符,执行chcp 932切换代码页后再启动sqlplus。
如果数据库使用UTF-8字符集,需将代码页切换为65001 - 第三步:调整命令行窗口字体配置
右键cmd窗口标题栏→「属性」→「字体」,选择支持日语显示的字体(如MS Gothic、Meiryo等),默认点阵字体不支持日语字符渲染,会导致显示异常。 - 第四步:确认NLS_LANG环境变量生效
启动cmd后执行echo %NLS_LANG%,确认输出为你设置的AMERICAN_AMERICA.JA16SJISTILDE,若未生效可直接在当前会话执行命令临时生效后再启动sqlplus:set NLS_LANG=AMERICAN_AMERICA.JA16SJISTILDE - 第五步:校验存储数据本身是否为乱码
如果上述配置全部正确仍显示异常,需确认插入数据时的客户端字符集配置是否正确,可执行SQL查看字段存储的原始编码:
对比返回的十六进制编码与对应字符集的日语编码规则,确认数据入库时未发生乱码。SELECT DUMP(待校验日文字段名,1016) FROM 目标表名 WHERE ROWNUM = 1;
内容的提问来源于stack exchange,提问作者linhpq
相关产品推荐
相关产品推荐

