暂无图片
oracle12g存入的表数据存在乱码情况,各项编码配置都已是utf-8?
我来答
分享
喵喵娜戈呜
2022-01-14
oracle12g存入的表数据存在乱码情况,各项编码配置都已是utf-8?

系统环境是windows server 2008,环境变量跟数据库一致,但是表里存入的字段是这种格式的乱码,后台web打断点看了解析的数据是中文
QQ图片20220114103338.png

我来答
添加附件
收藏
分享
问题补充
3条回答
默认
最新
严少安
暂无图片

也可能是原始数据导入的时候某个环节的字符集是gbk?

暂无图片 评论
暂无图片 有用 0
DarkAthena

不是改UTF8就解决乱码了,重要的是字符集环境和数据要匹配,你先试下查询的时候转码,看看能不能解析出来,看看这个数据的字符集到底是个啥

select CONVERT(字段名, 'ZHS16GBK', 'AL32UTF8') from 表; select CONVERT(字段名, 'AL32UTF8', 'ZHS16GBK') from 表;

还有看看这个十六进制数据,分析下这几个字的字符集是啥

select utl_raw.cast_to_raw(字段名) from 表名

再查个东西

select * from nls_session_parameters

userenv 的language是数据库的字符集,不是会话的字符集

select utl_i18n.raw_to_char( UTL_I18N.string_to_raw('涓嬶級','ZHS16GBK'),'AL32UTF8') from dual

image.png

暂无图片 评论
暂无图片 有用 0
Thomas

原则上,和DB端字符集设置无关。一句话:NLS_LANG里的NLS_CHARCTERSET的设置,可以和DB端的NLS_CHARCTERSET不一致(因为与DB端交互时,系统会自动做字符集转换),但必须和OS的NLS_CHARCTERSET项一致,否则便会乱码。

连接DB的客户端,应该是WINDOWS。那么看这台WINDOWS在OS层面的NLS_LANG设置和环境变量里的NLS_LANG设置,是否一致就可以了。

Windows下,cmd窗口运行set NLS_LANG查看环境变量值,或者到注册表里查询NLS_LANG这一项的内容。这是环境变量设置。

Windows: cmd窗口敲chcp命令,得到字符集代码
例如:
C:\Users\Administrator>chcp
活动代码页: 936
代码936代表 中国 - 简体中文(GB2312)

查下OS层面的设置,和NLS_LANG环境变量是否一致。应该就是因为不一致,造成的乱码。

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏