plsql中文乱码解决方法

你问我如何解码中文PL/SQL乱码。
我来说一下我遇到的情况以及如何解决。

2 02 3 年我在上海做项目的时候,就遇到了这个鬼东西。
在客户的系统中,数据库字符集为ZHS1 6 GBK。
然而,客户在编写SQL脚本时,直接使用记事本保存。
默认为 UTF-8 结果导入数据库后,所有汉字都变成乱码了。

我尝试了几种方法,看看它们是否适合你:
1 我们先说最简单的方法,改变NLS_LANG环境变量。
您可以直接进入Windows控制面板并搜索“环境变量”,在“系统变量”下创建一个新变量,命名为NLS_LANG并填写值“ZH_CN.ZHS1 6 GBK”。
注意,不是英文的SIMPLIFIEDCHINESE,而是简体中文。
进行此更改后,您必须重新启动计算机才能使其生效。

2 如果环境变量不起作用,则必须更改数据库字符集。
但一般情况下我不推荐这个操作,因为改变数据库字符集是非常危险的。
我在北京做项目的时候,有朋友这样做了,结果数据搞乱了。
如果必须更改它,则必须首先连接到 SQLPlus 并执行 ALTER DATABASE CHARACTERSET ZHS1 6 GBK。
但前提是数据库必须完整备份。
如果失败的话,就会直接被拉下来。

3 我通常使用第三种方法,更改会话字符集。
直接在SQLPlus中执行ALTER SESSION SET NLS_CHARACTERSET=ZHS1 6 GBK即可。
这样做的好处是只修改当前会话,修改后无需重启即可生效。

4 如果中文数据来自文件那么你必须查看文件编码。
比如我上次在深圳做项目的时候,发现导入CSV文件的时候中文出现乱码。
我用Notepad++打开该文件,并在另存为时将编码更改为GBK。
如果是UTF-8 ,则必须将数据库字符集更改为AL3 2 UTF8
如果我推荐一个字符集,我通常使用ZHS1 6 GBK,因为它兼容性很好。
AL3 2 UTF8 是国际版本,多语言支持较强,但必须保证客户端和文件编码一致。

验证方法:在SQL中执行SELECT FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER LIKE '%CHARACTERSET%',查看数据库字符集是否正确。
然后执行 SELECT FROM NLS_SESSION_PARAMETERS WHERE PARAMETER LIKE '%CHARACTERSET%' 以查看当前会话的字符集。
最后,使用 echo %NLS_LANG% (Windows) 或 echo $NLS_LANG (Linux) 在命令行上检查环境变量。

如果更改后NLS_LANG仍然是乱码,则必须检查数据库字符集是否与NLS_LANG一致。
也有可能 PL/SQL Developer 这个废话改变了会话字母集本身。

如果 ALTER DATABASE 报告错误,这通常是原因字符集已更改。
上次我在上海就遇到了这个问题,最终不得不使用 CSALTER 工具来修复它。
如果数据量不大,也可以导出数据,用文本编辑器更改编码,然后导入。

要批量转换文件编码,只需在 Linux 上使用 iconv,在 Windows 上使用 Notepad++。
上次在深圳做项目的时候,一次性导入了5 000多条记录的CSV文件,全都是乱码。
我最终使用 Notepad++ 修复了它。

这些方法你都试试,如果还是有困难,我会想别的办法。
不管怎样,字符集最烦人的就是不同编码的不匹配。

PLSQL:[1]plsql中文乱码,显示问号

PLSQL Developer中文乱码问题

PLSQL Developer中文乱码问题

嘿嘿,你说的实在是太扎心了。
去年我在杭州帮助我的朋友开发他的 PLSQLDeveloper。
真是乱七八糟,汉字都是乱码,看着不舒服。

当时他的电脑系统变量不正确,所以我认为需要更改。
我让他打开系统属性并点击“环境变量”。
你看,需要在系统变量中添加一些新的东西,否则PLSQLDeveloper将无法识别中文。

我教他点击“系统变量”下的“新建”。
然后我让他写“NLS_LANG”作为变量名,“AMERICAN_AMERICA.AL3 2 UTF8 ”作为值。
填写完毕后,点击“确认”即可。

想一想:在他开始做这件事之前,他的客户端里的汉字都是乱码,连代码都很难读懂。
之后马上就正常了。
他当时说,现在情况会好一些,工作也会容易得多。

所以请记住这一点。
计算机系统变量不正确,PLSQLDeveloper出现汉字乱码。
按照这个方法就可以了。
但是,具体值取决于您的计算机系统。
我的朋友使用 Windows,所以这就是价值。
如果你用别的系统,我不敢乱说,你得试试。