日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle修改字符集

發布時間:2025/3/11 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle修改字符集 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

生產環境的數據表用了 中文字段名。

在生產環境oracle表正常,新建開發環境時,報字符串超長。

原因是

生產oracle字符集是:NLS_CHARACTERSETZHS16GBK

開發oracle字符集是:NLS_CHARACTERSET AL16UTF16


開發oracle需要修改字符集和生產一致。


開發下:

select * from V$nls_Parameters;


cmd,sqlplus登錄

system as dba

密碼


通過 "alter database character set ZHS16GBK;" 方式修改,但并不總是有效。該命令在Oracle8時被引入Oracle,這個操作在本質上并不轉換任何數據庫字符,只是簡單的更新數據庫中所有跟字符集相關的信息。
查詢字符集信息: "SQL> select name,value$ from props$ where name like '%NLS%';",結果有二十行。
修改步驟:
注意:轉換字符集,數據庫應該在RESTRICTED模式下進行. (使用DBA登錄數據庫)
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER SESSION SET SQL_TRACE=TRUE;
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL> ALTER DATABASE OPEN;
SQL> set linesize 120;
SQL> ALTER DATABASE CHARACTER SET ZHS16GBK;

常見問題:
問題1:
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
原因:
字符集超集問題,所謂超集是指:當前字符集中的每一個字符在新字符集中都可以表示,并使用同樣的代碼點,比如很多字符集都是US7ASCII的嚴格超集。如果不是超集,將獲得以上錯誤。
解決方式:
SQL> alter database character set internal_use ZHS16GBK;
SQL> select * from v$nls_parameters;
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;
備注:
ALTER DATABASE CHARACTER SET操作的內部過程是完全相同的,也就是說INTERNAL_USE提供的幫助就是使Oracle數據庫繞過了子集與超集的校驗。該方法某些方面有用處,比如測試環境;應用于產品環境大家應該格外小心,除了你以外,沒有人會為此帶來的后果負責。

問題2:
ALTER DATABASE CHARACTER SET ZHS16GBK
*
ERROR at line 1:
ORA-12721: operation cannot execute when other sessions are active
原因:
字符集超集問題。
解決方式:
SQL> alter database character set internal_use ZHS16GBK;
SQL> select * from v$nls_parameters;
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;

問題3:
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
原因:
數據庫存在CLOB類型字段,那么就不允許對字符集進行轉換
解決方式:
這時候,我們可以去查看alert.log日志文件,看CLOB字段存在于哪些表上:
內容如:
ALTER DATABASE CHARACTER SET ZHS16GBK
SYS.METASTYLESHEET (STYLESHEET) - CLOB populated
ORA-12716 signalled during: ALTER DATABASE CHARACTER SET ZHS16GBK...
對于用戶表,可以先將該表導出,然后把該表刪掉,等字符轉換完畢后在導入。


-------------

更多的Java,Angular,Android,大數據,J2EE,Python,數據庫,Linux,Java架構師,:

http://www.cnblogs.com/zengmiaogen/p/7083694.html


總結

以上是生活随笔為你收集整理的oracle修改字符集的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。