Oracle数据库更改字符集

oracle数据库的字符集更改 

A、oracle server 端 字符集查询 

select userenv('language') from dual 

其中NLS_CHARACTERSET 为server端字符集 

NLS_LANGUAGE 为 server端字符显示形式 

B、查询oracle client端的字符集 

$echo $NLS_LANG 

如果发现你select 出来的数据是乱码,请把client端的字符集配置成与linux操作系统相同的字符集。如果还是有乱码,则有可能是数据库中的数据存在问题,或者是oracle服务端的配置存在问题。 

C、server端字符集修改 

***************************************************************** 

*  更改字符集步骤方法(WE8ISO8859P1 --> ZHS16GBK)            * 

***************************************************************** 

SQL> 

将数据库启动到RESTRICTED模式下做字符集更改: 

SQL> conn /as sysdba 

Connected. 

SQL> shutdown immediate; 

Database closed. 

Database dismounted. 

ORACLE instance shut down. 

SQL> startup mount 

ORACLE instance started. 

Total System Global Area  236000356 bytes 

Fixed Size                   451684 bytes 

Variable Size             201326592 bytes 

Database Buffers           33554432 bytes 

Redo Buffers                 667648 bytes 

Database mounted. 

SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION; 

System altered. 

SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; 

System altered. 

SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0; 

System altered. 

SQL> alter database open; 

Database altered. 

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 

提示我们的字符集:新字符集必须为旧字符集的超集,这时我们可以跳过超集的检查做更改: 

SQL> ALTER DATABASE character set INTERNAL_USE ZHS16GBK; 

Database altered. 

SQL> select * from v$nls_parameters; 

略 

19 rows selected. 

重启检查是否更改完成: 

SQL> shutdown immediate; 

Database closed. 

Database dismounted. 

ORACLE instance shut down. 

SQL> startup 

ORACLE instance started. 

Total System Global Area  236000356 bytes 

Fixed Size                   451684 bytes 

Variable Size             201326592 bytes 

Database Buffers           33554432 bytes 

Redo Buffers                 667648 bytes 

Database mounted. 

Database opened. 

SQL> select * from v$nls_parameters; 

略 

19 rows selected. 

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 

D、client端字符集修改 

在 /home/oracle与 /root用户目录下的.bash_profile中 

添加或修改 export NLS_LANG="AMERICAN_AMERICA.UTF8" 语句 

关闭当前ssh窗口。 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle数据库中修改字符集需要执行以下步骤: 1. 确认当前数据库字符集和校对集 可以使用以下命令查询当前数据库字符集和校对集: ``` SELECT * FROM NLS_DATABASE_PARAMETERS; ``` 2. 停止数据库 使用SQL*Plus或者其他工具以SYSDBA身份登录数据库,执行以下命令停止数据库: ``` SHUTDOWN IMMEDIATE; ``` 3. 修改字符集和校对集 执行以下ALTER DATABASE命令修改字符集和校对集: ``` ALTER DATABASE CHARACTER SET <新字符集> [NATIONAL CHARACTER SET <新 NCHAR 字符集>] ; ``` 例如,要将数据库字符集修改为UTF8,可以执行以下命令: ``` ALTER DATABASE CHARACTER SET UTF8; ``` 如果需要修改NCHAR字符集,可以使用以下命令: ``` ALTER DATABASE NATIONAL CHARACTER SET UTF8; ``` 4. 修改所有表的字符集和校对集 执行以下命令修改所有表的字符集和校对集: ``` ALTER TABLE <表名> MODIFY <列名> <数据类型> CHARACTER SET <新字符集> [COLLATE <新校对集>] ; ``` 例如,要将表的字符集修改为UTF8,可以执行以下命令: ``` ALTER TABLE my_table MODIFY my_column VARCHAR2(100) CHARACTER SET UTF8; ``` 如果需要修改校对集,可以使用以下命令: ``` ALTER TABLE my_table MODIFY my_column VARCHAR2(100) CHARACTER SET UTF8 COLLATE <新校对集>; ``` 5. 修改所有索引的字符集和校对集 执行以下命令修改所有索引的字符集和校对集: ``` ALTER INDEX <索引名> REBUILD [TABLESPACE <表空间名>] [PARAMETERS ('NLS_SORT=<新校对集>' [, 'NLS_COMP=<新比较级>'])]; ``` 例如,要将索引的字符集修改为UTF8,可以执行以下命令: ``` ALTER INDEX my_index REBUILD PARAMETERS ('NLS_SORT=UTF8'); ``` 如果需要修改校对集和比较级,可以使用以下命令: ``` ALTER INDEX my_index REBUILD PARAMETERS ('NLS_SORT=<新校对集>', 'NLS_COMP=<新比较级>'); ``` 6. 启动数据库 使用SQL*Plus或者其他工具以SYSDBA身份登录数据库,执行以下命令启动数据库: ``` STARTUP; ``` 注意:修改数据库字符集和校对集是一个非常重要的操作,需要谨慎处理并进行充分测试。在修改前一定要备份数据库,以防修改失败导致数据丢失。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值