oracle中文乱码

发布网友

我来回答

4个回答

懂视网

本地ORACLE连接创建好后,默认是GBK的字符集,如果连接服务器不是同样的GBK字符集就会出现中文乱码的问题,这种情况我们需要修改本地的字符集来和服务器匹配.

通过注册表修改
  HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOME0  
  NLS_LANG 改为你需要的字符集.



设定环境变量

    添加环境变量---   NLS_LANG 改为你需要的字符集



常用字符集
  AMERICAN_AMERICA.WE8ISO8859P1
  SIMPLIFIED CHINESE_CHINA.ZHS16GBK
  AMERICAN_AMERICA.AL32UTF8

  SIMPLIFIED CHINESE_CHINA.US7ASCII

 AMERICAN_AMERICA.US7SCII
 AMERICAN _ AMERICA. ZHS16GBK

  AMERICAN_AMERICA.utf8



  现在,介绍一些与字符集有关的NLS_LANG参数,
  NLS_LANG格式:
  NLS_LANG = language_territory.charset
  有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。其中:language 指定服务器消息的语言。
  territory 指定服务器的日期和数字格式。
  charset 指定字符集
  例如: 
  AMERICAN_AMERICA.US7SCII
  AMERICAN _ AMERICA. ZHS16GBK
  还有一些子集可以更明确定义NLS_LANG参数: 
  DICT.BASE 数据字典基本 表版本
  DBTIMEZONE 数据库时区
  NLS_LANGUAGE 语言
  NLS_TERRITORY 地域
  NLS_CURRENCY 本地货币字符
  NLS_ISO_CURRENCY ISO货币字符
  NLS_NUMERIC_CHARACTERS 小数字符和组 分隔开
  NLS_CHARACTERSET 字符集
  NLS_CALENDAR 日历系统
  NLS_DATE_FORMAT 缺省的日期格式
  NLS_DATE_LANGUAGE 缺省的日期语言
  NLS_SORT 字符排序序列
  NLS_TIME_FORMAT 时间格式
  NLS_TIMESTAMP_FORMAT 时间戳格式




本文出自 “事在人为,知在天意” 博客,请务必保留此出处http://yangsj.blog.51cto.com/8702844/1697075

oracle客户端中文乱码

标签:oracle客户端中文乱码

热心网友

1、你的NLS_CHARACTERSET=CHS16GBK,说明存贮中文字符没问题的,用AL32UTF8也可以,也有的用AL16UTF16。
2、查询时候需要设置客户端中文显示。例如:
NLS_LANG=AMERICAN_CHINA.AL32UTF8
NLS_LANG=AMERICAN_CHINA.ZHS16GBK
3、你可以在注册表或Windows环境变量设置NLS_LANG
Windows:
# 常用中文字符集
set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
# 常用unicode字符集
set NLS_LANG=american_america.AL32UTF8
可以通过修改注册表
HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOMExx/NLS_LANG
4、select userenv('language') from al;

热心网友

在Redhat上安装Oracle 10g没有设定字符集,采用的是操作系统默认字符集:WE8ISO8859P1,将字符集修改为:ZHS16GBK。由于过程不可逆,首先需要备份数据库。
1.数据库全备

2.查询当前字符集
SQL> select * from nls_database_parameters where parameter='NLS_CHARACTERSET';
PARAMETER VALUE
---------------------------------------- ----------------------------------------
NLS_CHARACTERSET WE8ISO8859P1

3.关闭数据库
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

4.启动数据库到mount状态
SQL> startup mount
ORACLE instance started.
Total System Global Area 2055206 bytes
Fixed Size 1266608 bytes
Variable Size 1006648 bytes
Database Buffers 100663296 bytes
Redo Buffers 2924544 bytes
Database mounted.

5.*session
SQL> alter system enable restricted session;
System altered.

6.查询相关参数并修改
SQL> show parameter job_queue_processes;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
job_queue_processes integer 10

SQL> show parameter aq_tm_processes;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes integer 0

SQL> alter system set job_queue_processes=0;
System altered.

7.打开数据库
SQL> alter database open;
Database altered.

8.修改字符集
SQL> alter database character set ZHS16GBK;
alter database character set ZHS16GBK
*
ERROR at line 1:
ORA-12712: new character set must be a superset of old character set

出现错误提示,新字符集必须是老字符集的超集,也就原来字符集是新字符集的子集,可以再Oracle官方文档上查询字符集包含关系。下面使用Oracle内部命令internal_use,跳过超集检查,生产环境不建议使用此方法。

SQL> alter database character set internal_use ZHS16GBK;
Database altered.

9.查询当前字符集
SQL> select * from nls_database_parameters where parameter='NLS_CHARACTERSET';
PARAMETER VALUE
---------------------------------------- ----------------------------------------
NLS_CHARACTERSET ZHS16GBK

10.关闭数据库
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

11.启动数据库到mount状态
SQL> startup mount
ORACLE instance started.
Total System Global Area 2055206 bytes
Fixed Size 1266608 bytes
Variable Size 1006648 bytes
Database Buffers 100663296 bytes
Redo Buffers 2924544 bytes
Database mounted.

12.将相关参数改回原来值
SQL> alter system set job_queue_processes=10;
System altered.

13.打开数据库
SQL> alter database open;
Database altered.

热心网友

ALTER DATABASE CHARACTER SET ZHS16GBK;

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com