博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
更改Oracle字符集:把字符集ZHS16GBK换成UTF8
阅读量:5133 次
发布时间:2019-06-13

本文共 1914 字,大约阅读时间需要 6 分钟。

用SQLPLUS以sysdba身份登录

SQL> select name,value$ from props$ where name like '%NLS%';

NAME                           VALUE$

------------------------------ ------------------------------
NLS_LANGUAGE                   AMERICAN
NLS_TERRITORY                  AMERICA
NLS_CURRENCY                   $
NLS_ISO_CURRENCY               AMERICA
NLS_NUMERIC_CHARACTERS         .,
NLS_CHARACTERSET               ZHS16GBK
NLS_CALENDAR                   GREGORIAN
NLS_DATE_FORMAT                DD-MON-RR
NLS_DATE_LANGUAGE              AMERICAN
NLS_SORT                       BINARY
NLS_TIME_FORMAT                HH.MI.SSXFF AM

NAME                           VALUE$

------------------------------ ------------------------------
NLS_TIMESTAMP_FORMAT           DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT             HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY              $
NLS_COMP                       BINARY
NLS_LENGTH_SEMANTICS           BYTE
NLS_NCHAR_CONV_EXCP            FALSE
NLS_NCHAR_CHARACTERSET         AL16UTF16
NLS_RDBMS_VERSION              10.2.0.1.0

20 rows selected.

NLS_CHARACTERSET是字符集,NLS_NCHAR_CHARACTERSET是国家字符集

中有两大类字符型数据,VARCHAR2是按照数据库字符集来存储数据。
而NVARCHAR2是按照国家字符集存储数据的。同样,CHAR和NCHAR也一样,一是数据库字符符,一是国家字符集。

转换字符集,数据库应该在RESTRICTED模式下

首先要确定修改后的字符集是不是修改前的超集,如果不是可能出现相同的点对应不同的字符,出现乱码的问题。

出现这个错误是 oracle 只支持从子集到超集的转变

那有什么方法可进行强制转换呢?
该指令会跳过子集与超集的检验,当然强制转换可能会造成数据的损坏,要谨慎使用!!
下面借助eygle的帖子执行。

SQL> shutdown immediate

Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.

Total System Global Area 1845493760 bytes

Fixed Size                  2021568 bytes
Variable Size             452986688 bytes
Database Buffers         1375731712 bytes
Redo Buffers               14753792 bytes
Database mounted.
SQL> alter session set sql_trace=true;

Session altered.

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 INTERNAL_USE UTF8;

Database altered.

SQL>update props$ set VALUE$='UTF8' where NAME='NLS_NCHAR_CHARACTERSET'

转载于:https://www.cnblogs.com/phpfans/archive/2011/12/14/2287950.html

你可能感兴趣的文章
渠道运营一点事
查看>>
CMD终端关于pip报错,scrapy报错的一种处理方法
查看>>
MiniApp微信小程序入口在安卓手机桌面
查看>>
日常训练
查看>>
1030: [JSOI2007]文本生成器 ac自动机+dp
查看>>
如何在普通 UIViewController 中使用 UITableView
查看>>
HDU 3651 A Simple Problem
查看>>
十全干货:核心游戏系统架构设计
查看>>
64位CentOS源码编译方式安装wine
查看>>
【luogu P3931 SAC E#1 - 一道难题 Tree】 题解
查看>>
Spring Boot实战笔记(一)-- Spring简介
查看>>
java基础(1)
查看>>
Java对象的序列化和反序列化实践
查看>>
window 常用软件
查看>>
第八届河南省赛D.引水工程(kruthcra+prime)
查看>>
例子:点击滑块滚动,左侧逐渐变大,右侧变小
查看>>
python学习笔记(二十七)多线程与多进程
查看>>
简单照片浏览器
查看>>
split(v1,v2)用于把一个字符串分割成字符串数组
查看>>
python学习笔记 -- map() 操作可迭代序列
查看>>