工作中有时会遇到Oracle乱码问题,根本原因是由于数据库端字符集和客户端字符集不匹配导致的。
排查的基本方法如下。
1.查询数据库字符集
select * from nls_database_parameters
查询出的"NLS_CHARACTERSET"字段就是数据库字符集
2.修改数据库字符集
如果当前数据库的字符编码不是自己想要的,需要修改数据库字符集。
比如设置为"UTF8"的步骤
SQL> shutdown immediate;
SQL> STARTUP MOUNT;
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL> ALTER DATABASE OPEN;
SQL> ALTER DATABASE CHARACTER SET INTERNAL_USE AL32UTF8;
SQL> ALTER DATABASE national CHARACTER SET AL16UTF16;
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP
3. 查询客户端应该设置的正确字符集
select userenv('language') from dual
4. 设置客户端字符集
配置环境变量"NLS_LANG",值为步骤3查询出的结果
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
参考文章
https://blog.youkuaiyun.com/halley333/article/details/52537194