• oracle中文乱码


    在自己的电脑(Windows 7 简体中文)上编写的插入数据的SQL脚本(内容大致如下)

    放到Oracle数据库(Linux系统)执行后发现插入的中文乱码

    使用PL/SQL Developer连接查询也是乱码

    解决方法:

    自己的电脑的字符集是

    安装的Oracle客户端也显示是SIMPLIFIED CHINESE_CHINA.ZHS16GBK

    (打开注册表,'开始'-'运行' 输入'regedit'-确定。找到如下路径,

    HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/KEY_OraClient12Home1)

    使用UltraEdit工具打开脚本也可以看到脚本字符集

    所以在自己的电脑的脚本保存时默认是ZHS16GBK.

    查询数据库的字符集

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

    USERENV('LANGUAGE')

    ----------------------------------------------------

    AMERICAN_AMERICA.AL32UTF8

    数据库的字符集是AMERICAN_AMERICA.AL32UTF8

    所以数据中的中文插入后乱码

    可以使用如下方法:

    1--------在PL/SQL Developer工具上执行插入语句。但是数据量过多时执行速度很慢很慢

    2--------在数据库服务器(Linux系统)上为数据库指定的Linux用户(这里是oracle

    暂时修改NLS_LANG环境变量export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"

    [oracle@oracle11gr203db ~]$ export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"

    [oracle@oracle11gr203db ~]$ sqlplus scott/scott

    SQL*Plus: Release 11.2.0.3.0 Production on Tue Mar 21 17:58:27 2017

    Copyright (c) 1982, 2011, Oracle. All rights reserved.

    Connected to:

    Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

    With the Partitioning, OLAP, Data Mining and Real Application Testing options

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

    USERENV('LANGUAGE')

    --------------------------------------------------------------------------------

    AMERICAN_AMERICA.AL32UTF8

    此时执行字符集为ZHS16GBK的脚本并提交数据。但是服务器上查询是需要将 NLS_LANG环境变量修改为:export NLS_LANG="AMERICAN_AMERICA.AL32UTF8"

    [oracle@oracle11gr203db ~]$ export NLS_LANG="AMERICAN_AMERICA.AL32UTF8"

    [oracle@oracle11gr203db ~]$ echo $NLS_LANG

    AMERICAN_AMERICA.AL32UTF8

    [oracle@oracle11gr203db ~]$

    也可以使用PL/SQL Developer等其他工具远程查询.

    3--------在自己的电脑上将脚本保存是选utf-8字符集,这里我使用UltraEdit工具保存脚本

    然后将脚本放到服务器上并将 NLS_LANG环境变量修改为:

    export NLS_LANG="AMERICAN_AMERICA.AL32UTF8"

    此时执行字符集为UTF8的脚本并提交数据。

    在服务器上查询是需要将 NLS_LANG环境变量修改为:

    export NLS_LANG="AMERICAN_AMERICA.AL32UTF8"

    [oracle@oracle11gr203db ~]$ export NLS_LANG="AMERICAN_AMERICA.AL32UTF8"

    [oracle@oracle11gr203db ~]$ echo $NLS_LANG

    AMERICAN_AMERICA.AL32UTF8

    [oracle@oracle11gr203db ~]$

    同样,也可以使用PL/SQL Developer等其他工具远程查询.

    注意:这里在保存脚本为utf-8字符集是有两种,一般建议选择无BOM的,

    有BOM的脚本第一行会报错,无BOM的不会出现(仅限安装在Linux上的oracle数据库)

      

    所以一定要声明NLS_LANG环境变量(一般与操作系统有关)

    相关命令

    AMERICAN_AMERICA.AL32UTF8

    echo $NLS_LANG

    export NLS_LANG="AMERICAN_AMERICA.AL32UTF8"

    export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"

    sqlplus scott/scott

    参考文档

    查看windows 系统字符集

    http://jingyan.baidu.com/article/3c343ff70e42e70d3679635b.html

    Linux系统下Oracle执行SQL脚本后中文出现乱码解决方法

    http://blog.csdn.net/zzs0829/article/details/7410264

    utf-8和utf-8 +bom 有什么区别?

    https://zhidao.baidu.com/question/1988203804217274627.html

    如何判断一个文本文件内容的编码格式 UTF-8 ? ANSI(GBK)

    http://blog.sina.com.cn/s/blog_4f4f9e6f01019ru7.html

  • 相关阅读:
    Winform编程总结2—常用的XML读写
    SQL点滴4—筛选数据列的类型,字段大小,是否可为空,是否是主键,约束等等信息
    SSIS常用的包—发送Email任务
    SSIS常用的包—FTP任务
    Centos 下同时安装 Mysql4 和 Mysql5,二进制方式
    iptables 学习笔记
    em是否到了退出的时候
    CentOs 5.2设置DVD为本地yum源
    WAMP环境配置
    Silverlight学习笔记:布局之stackpanel
  • 原文地址:https://www.cnblogs.com/hw-1015/p/6600681.html
Copyright © 2020-2023  润新知