PL/SQL乱码解决方法

PL/SQL 出现乱码(就是问号 ???)

1. 先查看一下数据库服务端的编码
> select * from nls_database_parameters ;
Paste_Image.png
2. 先查看一下数据库客户端的编码
  • 查看客户端实例字符集
> select * from  nls_instance_parameters ;
Paste_Image.png
  • 查看客户端会话字符集
> select * from nls_session_parameters ;
image.png
  • 如果是windows系统,为了保险,检查一下注册表。按快捷建 win + r 输入regedit 回车 ,打开注册表HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/KEY_OraDb10g_home1
    image.png

可以看出服务端是AL32UTF8(utf-8升级版)的编码,而客户端是简体中文(GBK)
我们要做的就是把客户端的编码和服务端的统一就ok了

  • 编码组成由两部分 :语言.编码 ,所以可能有编码相同,语言不同的组成方式
    常见语言:SIMPLIFIED CHINESE_CHINA(中文) 和 AMERICAN_AMERICA(英文)
    常见GBK编码:ZHS16GBK
    常见UTF8编码:AL32UTF8
  • 常见组合:SIMPLIFIED CHINESE_CHINA.ZHS16GBKAMERICAN_AMERICA.AL32UTF8

3. 解决方法就是增加一个变量提供给客户端引用

把此语句执行结果设置成 NLS_LANG 的值,就能保存客户端的编码和服务端一致

-- 查询oracle服务端语言和编码
select userenv('language') from dual;
  • 方法一:增加一个系统变量,重启电脑(推荐)


    Paste_Image.png
  • 方法二:windwos命令执行(CMD),只在当前窗口有效

    • 常用中文字符集 set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
    • 常用unicode字符集 set NLS_LANG=american_america.AL32UTF8
  • 为了保险,最好把注册表的值也同步修改, 右键修改,把编码部分改为 AL32UTF8

    image.png

    image.png

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容