PL/SQL乱码解决方法

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

1. 先查看一下数据库服务端的编码
> select * from nls_database_parameters ;
PL/SQL乱码解决方法_第1张图片
Paste_Image.png
2. 先查看一下数据库客户端的编码
  • 查看客户端实例字符集
> select * from  nls_instance_parameters ;
Paste_Image.png
  • 查看客户端会话字符集
> select * from nls_session_parameters ;
PL/SQL乱码解决方法_第2张图片
image.png
  • 如果是windows系统,为了保险,检查一下注册表。按快捷建 win + r 输入regedit 回车 ,打开注册表HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/KEY_OraDb10g_home1
    PL/SQL乱码解决方法_第3张图片
    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;
  • 方法一:增加一个系统变量,重启电脑(推荐)


    PL/SQL乱码解决方法_第4张图片
    Paste_Image.png
  • 方法二:windwos命令执行(CMD),只在当前窗口有效

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

    PL/SQL乱码解决方法_第5张图片
    image.png

    PL/SQL乱码解决方法_第6张图片
    image.png

你可能感兴趣的:(PL/SQL乱码解决方法)