錯誤提示:
一個漢字占了三個字節,而不是兩個,這跟字符集有關。
查一下字符集:select userenv('language') from dual;
結果顯示,本機Oracle的字符集是UTF-8,32位,而不是GBK的16位。UTF-8的每個字符占3個字節(bytes),可以通過修改默認字符集來實現varchar2(2)存儲一個漢字。
若此時數據庫服務器已啟動,則先執行SHUTDOWN IMMEDIATE命令關閉數據庫服務器,然后執行以下命令:
SQL>STARTUP MOUNT;
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>ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK; //跳過超子集檢測
SQL>ALTER DATABASE national CHARACTER SET INTERNAL ZHS16GBK;
SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP