【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关键字和函数不支持

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值