【Oracle】sqldeveloper中文乱码

sqldeveloper中文乱码

字符集查询

无论是数据查询还是输出端,中文都显示为倒着的问号,在百度查的结果大部分都是说:oracle服务端和本地的字符集不一致导致的,需要添加NLS_LANG环境变量将本地字符集改成oracle服务端的,oracle服务端字符集可通过下面的语句查询:

 select userenv('language') from dual;

我的输出结果为:
AMERICAN_AMERICA.WE8MSWIN1252

其表示的含义为:语言_地域.字符集,我把环境变量设置为NLS_LANG=WE8MSWIN1252后,还是继续乱码,我猜测可能是本地没有WE8MSWIN1252这个字符集,所以我想着能不能修改oracle服务端字符集。

服务端字符集修改

由于安装oracle 11g的时候没有指定字符集,因此oracle数据库将WE8MSWIN1252作为默认的字符集。按照网上的教程,将字符集修改为ZHS16GBK:

SQL> shutdown immediate

SQL> startup mount

SQL> alter system enable restricted session;

System altered.

SQL> alter database open;

Database altered.

SQL> ALTER DATABASE character set INTERNAL_USE ZHS16GBK;

Database altered.

SQL> alter system disable restricted session;

System altered.

SQL> select userenv('language') from dual;

”靠“的问题

将oracle服务端编码改为GBK后,倒立的?变成了”靠“

原因:oracle服务器使用WE8MSWIN1252字符集存储数据时,由于无法存储中文,将中文存储成倒立的?,其编码为’BF’,'BF’通过GBK字符集翻译后,就变成了"靠"。

所以,我重新执行sql数据库写入脚本,在sqldeveloper中就可以正常显示了,然而,只有一部分中文正常显示,另一部分还是显示为"靠"。看sql脚本是由于脚本对部分id作为了判断,如果id存在就不会再做插入,因此需清空用户下的所有的数据表(如下),然后重新执行sql脚本。

set serveroutput on  -- 打开oracle输出开关 
declare
v_sql varchar2(2000) ;   -- 申明变量类型
CURSOR cur is select table_name from user_tables order by table_name ;  -- cur数据表游标
begin
for rows in cur
loop
v_sql := 'TRUNCATE TABLE ' || rows.table_name ;   -- ||为连接运算符 
dbms_output.put_line(v_sql);  -- 打印oracle清除记录
execute immediate v_sql ; 
end loop;
end;

tip:感觉用dbeaver比sqldeveloper好用些,但有些oracle关键字和函数不支持

你可能感兴趣的:(数据库,oracle,数据库,sql)