深圳工程建设信息网站,网站做m版,外贸视频网站开发,聊城高端网站制作ORACLE NLS_CHARACTERSET字符集的更改 数据库创建以后#xff0c;如果需要修改字符集#xff0c;通常需要重建数据库#xff0c;通过导入导出的方式来转换。 我们也可以通过以下方式更改 ALTER DATABASE CHARACTER SET 注意#xff1a…ORACLE NLS_CHARACTERSET字符集的更改 数据库创建以后如果需要修改字符集通常需要重建数据库通过导入导出的方式来转换。 我们也可以通过以下方式更改 ALTER DATABASE CHARACTER SET 注意修改数据库字符集时必须谨慎修改之前一定要为数据库备份。由于不能回退这项操作因此可能会造成数据丢失或者损坏。 这是最简单的转换字符集的方式但并不总是有效。 这个命令在Oracle8时被引入Oracle,这个操作在本质上并不转换任何数据库字符只是简单的更新数据库中所有跟字符集相关的信息。 这意味着你只能在新字符集是旧字符集严格超集的情况下使用这种方式转换。 所谓超集是指 当前字符集中的每一个字符在新字符集中都可以表示并使用同样的代码点 比如很多字符集都是US7ASCII的严格超集。 如果不是超集将获得以下错误 SQL ALTER DATABASE CHARACTER SET ZHS16CGB231280; ALTER DATABASE CHARACTER SET ZHS16CGB231280 * ERROR at line 1: ORA-12712: new character set must be a superset of old character set 下面我们来看一个测试(以下测试在Oracle9.2.0下进行Oracle9i较Oracle8i在编码方面有较大改变在Oracle8i中测试结果可能略有不同) 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 US7ASCII NLS_CALENDAR GREGORIAN NLS_DATE_FORMAT DD-MON-RR NLS_DATE_LANGUAGE AMERICAN …… NLS_NCHAR_CHARACTERSET AL16UTF16 NLS_RDBMS_VERSION 9.2.0.4.0 20 rows selected. SQL select name,dump(name) from eygle.test; NAME DUMP(NAME) ------------------------------------------------------ 测试 Typ1 Len4: 178,226,202,212 Test Typ1 Len4: 116,101,115,116 2 rows selected.转换字符集数据库应该在RESTRICTED模式下进行。 c:\sqlplus “/ as sysdba” SQL*Plus: Release 9.2.0.4.0 - Production on Sat Nov 1 10:52:30 2003 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. Connected to: Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production With the Partitioning, Oracle Label Security, OLAP and Oracle Data Mining options JServer Release 9.2.0.4.0 - Production SQL shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL STARTUP MOUNT; ORACLE instance started. Total System Global Area 76619308 bytes Fixed Size 454188 bytes Variable Size 58720256 bytes Database Buffers 16777216 bytes Redo Buffers 667648 bytes Database mounted. SQL ALTER SESSION SET SQL_TRACETRUE; Session altered. SQL ALTER SYSTEM ENABLE RESTRICTED SESSION; System altered. SQL ALTER SYSTEM SET JOB_QUEUE_PROCESSES0; System altered. SQL ALTER SYSTEM SET AQ_TM_PROCESSES0; System altered. SQL ALTER DATABASE OPEN; Database altered. SQL set linesize 120 SQL ALTER DATABASE CHARACTER SET ZHS16GBK; ALTER DATABASE CHARACTER SET ZHS16GBK * ERROR at line 1: ORA-12721: operation cannot execute when other sessions are active SQL ALTER DATABASE CHARACTER SET ZHS16GBK; ALTER DATABASE CHARACTER SET ZHS16GBK * ERROR at line 1: ORA-12716: Cannot ALTER DATABASE CHARACTER SET when CLOB data exists 在Oracle9i中如果数据库存在CLOB类型字段那么就不允许对字符集进行转换 SQL