PLSQL使用中文乱码(Oracle版本为19C)

乱码分类

  • 数据库插入的中文数据查询时显示为乱码(不是解决的重点)
  • SQL语句中包含中文时,编译报错(<(^-^)>就是这个问题!)

问题截图


报错时也是乱码....

解决方法

一、在SQL窗口中使用SQL语句
select * from nls_database_parameters;

查询结果如图所示:

可以看到,语言_地域.字符集,即NLS_LANGUAGE,NLS_TERRITORY,NLS_CHARACTERSET三项
将它们组合为AMERICAN_AMERICA.AL32UTF8
一定要自己查询自己的Oracle,不要复制,因为不一定相同!!
二、电脑设置环境变量

  • 单击此电脑->右键属性->高级设置->环境变量
  • 新建用户环境变量即可。命名为:NLS_LANG , 值为在第一步组合好的字符串

三、重启PLSQL即可解决中文乱码问题
附带解决录入中文数据显示乱么的问题

问题原理

虽然按照步骤可以解决问题,但是还是要清楚问题出现的原理
先说两个概念

  • 客户端字符集
    客户端字符集定义了客户端字符数据的编码方式,任何发自或发往客户端的字符数据均使用客户端定义的字符集编码。
  • Oracle服务器端字符集(也是数据库字符集)
    数据库字符集在创建数据库时指定,在创建后通常不能更改。

简单说就是我们使用的Oracle图形化界面PLSQL属于是客户端,而Oracle服务使用的是服务器端。经过查询后,发现我们客户端的字符集与服务器端字符集不同,因此没办法正确传递信息,编码格式不同导致我们客户端看不懂服务器的信息,所以乱码。因此需要通过上述步骤,配置本地用户环境变量,使客户端字符集与服务器端字符集相同。
点击查看详细讲解

以上仅个人理解与尝试,仅为记录学习过程。
对了,转载的详细讲解很值得一看^_^

posted @ 2022-03-29 18:53  菠菠吹雪  阅读(264)  评论(0)    收藏  举报