使用plsql登录的时候,oracle的tns不显示。需要在本机上增加环境变量:
NLS_LANG=SIMPLIFIED
CHINESE_CHINA.ZHS16GBK
1.打开注册表-regedit
2.找到如下目录:
HKEY_LOCAL_MACHINE -> SOFTWARE -> ORACLE ->
KEY_OraDb10g_home1
3.执行sql :select
userenv('language') from dual; 获取oracle服务端字符集X
4. 右键修改
NLS_LANG 值为 X 即可。
备注:oracle10g
UTF8编码:SIMPLIFIED CHINESE_CHINA.UTF8
GBK编码:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
5、操作系统环境变量更改。
6、数据库字符集修改:
字符集问题:
源库ZHS16BGK,汉字在数据库存放的时候占用两个字节
目标库UTF8,汉字在数据库里存放的时候占用三个字节
由于字符集不同,导致现在数据库impdp的时候有些表的字段长度不够,出现ORA-12899: value too large
for column的错误。(此部分以上为原文注释)
今天在家又再次折腾,终于解决了这个问题,折腾了几次,每次都忘记,特记录一下:
SIMPLIFIED CHINESE_CHINA.UTF8
American_America.AL32UTF8
AMERICAN_AMERICA.UTF8
2016.04.24日。BAO_TEA数据库的解决:
解决办法:更改数据库字符集为GBK
1、首先查询oracle的字符集变量:
select * from v$nls_parameters where
parameter='NLS_CHARACTERSET';
查询结果:
SQL> select * from v$nls_parameters where parameter='NLS_CHARACTERSET';
PARAMETER
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
NLS_CHARACTERSET
ZHS16GBK
2、如果需要更改oracle字符集变量(更改为上面查询的结果ZHS16GBK),步骤:
SHUTDOWN IMMEDIATE;
STARTUP MOUNT EXCLUSIVE;
ALTER SYSTEM ENABLE RESTRICTED
SESSION;
ALTER SYSTEM SET
JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET
AQ_TM_PROCESSES=0;
ALTER DATABASE OPEN;
ALTER DATABASE NATIONAL CHARACTER SET
AL16UTF16; 更改国际字符集AA
ALTER DATABASE CHARACTER SET ZHS16GBK;
更改本地字符集BB
SHUTDOWN IMMEDIATE;
STARTUP ;
如果错误信息,在执行AA和BB语句的时候可能报错,请对照一下信息
如果提示:
ORA-12717: Cannot issue ALTER DATABASE NATIONAL
CHARACTER SET when NCLOB, NCHAR
or NVARCHAR2 data exists
则更改使用以下语句:
ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE
AL16UTF16;
如果提示:
ORA-12712: new character set must be a superset of
old character set
则更改使用以下语句:
ALTER DATABASE character set INTERNAL_USE
ZHS16GBK;
如果提示:
ORA-12721: operation
cannot execute when other sessions are active
则更改使用以下语句:
SHUTDOWN
IMMEDIATE;
STARTUP MOUNT
EXCLUSIVE;
如果提示:
ORA-01109: database not
open
则更改使用以下语句:
ALTER DATABASE
OPEN;
如果提示:
ORA-12719: operation
requires database is in RESTRICTED mode
则更改使用以下语句:
ALTER SYSTEM ENABLE
RESTRICTED SESSION;
3、检查Windows系统(win7,win2003server等)的变量:
win7:系统属性——》高级——》环境变量——》
设置NLS_LANG的值:SIMPLIFIED
CHINESE_CHINA.ZHS16GBK
4、注册表:
我看了一下注册表里面,nls_lang共有三个地方有:
第一个地方:local_machine——software——wow6432node——oracle——KEY_OraDb10g_home1
nls_lang=AMERICAN_AMERICA.ZHS16GBK
第二个地方:local_machine——system——controlset001——control——session
mananger——environment。
nls_lang=SIMPLIFIED
CHINESE_CHINA.ZHS16GBK
第三个地方:local_machine——system——currentcontrolset——control——session
mananger——environment。
nls_lang=SIMPLIFIED
CHINESE_CHINA.ZHS16GBK
执行:
exp tea/tea file="e:\tea3.dmp" buffer=40960 log="e:\tea3.log"
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0
- Production
With the Partitioning, OLAP and Data Mining options
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
即将导出指定的用户...
. 正在导出 pre-schema 过程对象和操作
. 正在导出用户 TEA 的外部函数库名
. 导出 PUBLIC 类型同义词
. 正在导出专用类型同义词
. 正在导出用户 TEA 的对象类型定义
即将导出 TEA 的对象...
. 正在导出数据库链接
. 正在导出序号
. 正在导出簇定义
. 即将导出 TEA 的表通过常规路径...
. . 正在导出表 A_OUTNOKEEP_QTY导出了 0 行
. . 正在导出表 A_PRICE_TMP导出了
0 行
. . 正在导出表 A_TMP_PACK导出了 0 行
. . 正在导出表 A_TMP_PACK2导出了
0 行
. . 正在导出表 A_YYTTOBAO导出了 0 行
. . 正在导出表 A_YYT_LOT导出了 0 行
. . 正在导出表 A_YYT_QTY导出了 0 行
. . 正在导出表 A_YYT_SUPRICE导出了 0 行
. . 正在导出表 BAO_BUSI_ST_RGPLAN导出了
0 行
. . 正在导出表 BUIS_MV_CCPFXB导出了 0 行
. . 正在导出表 BUIS_MV_ZXPFXB导出了 0 行
. . 正在导出表 BUIS_MV_ZXPFXBB导出了 0 行
.
.
.
. . 正在导出表 ZX_WULIU_KCZQL导出了 0 行
. . 正在导出表 ZX_XSRB导出了 0 行
. 正在导出同义词
. 正在导出视图
. 正在导出存储过程
. 正在导出运算符
. 正在导出引用完整性约束条件
. 正在导出触发器
. 正在导出索引类型
. 正在导出位图, 功能性索引和可扩展索引
. 正在导出后期表活动
. 正在导出实体化视图
. 正在导出快照日志
. 正在导出作业队列
. 正在导出刷新组和子组
. 正在导出维
. 正在导出 post-schema 过程对象和操作
. 正在导出统计信息
成功终止导出, 没有出现警告。
(完)2016年4月24日。阳明
安装的是PLSQL
Developer,执行SQL发现弹出的错误提示对话框都是ora29275表示。后来才明白是跟服务器的字符集不匹配的问题。方法如下:
1、查询oracle server端的字符集。打开SQL
Window输入下面SQL查询服务端的字符集。
select userenv('language') from
dual;
2、我的电脑中环境变量界面,在系统变量中新加:
变量名:NLS_LANG
变量值:SIMPLIFIED
CHINESE_CHINA.ZHS16GBK
其中的变量值跟服务器查询到得一致即可。
SQLPLUS
登录界面乱码,解决:
select * from nls_database_parameters;
1 NLS_LANGUAGE AMERICAN
2 NLS_TERRITORY AMERICA
3 NLS_CURRENCY $
4 NLS_ISO_CURRENCY AMERICA
5 NLS_NUMERIC_CHARACTERS .,
6 NLS_CHARACTERSET UTF8
7 NLS_CALENDAR GREGORIAN
8 NLS_DATE_FORMAT DD-MON-RR
9 NLS_DATE_LANGUAGE AMERICAN
10 NLS_SORT BINARY
11 NLS_TIME_FORMAT HH.MI.SSXFF AM
12 NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
13 NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
14 NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
15 NLS_DUAL_CURRENCY $
16 NLS_COMP BINARY
17 NLS_LENGTH_SEMANTICS BYTE
18 NLS_NCHAR_CONV_EXCP FALSE
19 NLS_NCHAR_CHARACTERSET AL16UTF16
20 NLS_RDBMS_VERSION 10.1.0.2.0
客户端的环境变量设置为:
NLS_LANG
AMERICAN_AMERICA.UTF8
搞定,乱码不在显示,显示为英文。
其他
SIMPLIFIED CHINESE_CHINA.UTF8
ALTER DATABASE CHARACTER SET ZHS16GBK;
ALTER DATABASE CHARACTER SET UTF8;
------------> ZHS16GBK
[oracle@localhost ~]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on Tue Jul 7 04:27:40
2009
Copyright (c) 1982, 2005,
Oracle. All rights
reserved.
SQL> conn /as sysdba
Connected.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> Startup restrict
ORACLE instance started.
Total System Global
Area 167772160
bytes
Fixed
Size 1218292
bytes
Variable
Size 79694092
bytes
Database
Buffers 79691776
bytes
Redo
Buffers 7168000
bytes
Database mounted.
Database opened.
SQL> ALTER DATABASE CHARACTER SET ZHS16GBK;
Database altered.
(有时候会遇到如下错误:ORA-12712: new character set must be a superset of old
character set
可以执行如下: 跳过超集的检查 :ALTER DATABASE character set INTERNAL_USE
zhs16gbk;)
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global
Area 167772160
bytes
Fixed
Size 1218292
bytes
Variable
Size 79694092
bytes
Database
Buffers 79691776
bytes
Redo
Buffers 7168000
bytes
Database mounted.
Database opened.
SQL>