Oralce 中漢字長度問題,oralce漢字長度問題

來源:互聯網
上載者:User

Oralce 中漢字長度問題,oralce漢字長度問題

一般,我們在Java層驗證字串長度的時候,使用String.length()方法,無論中文還是英文,返回的長度都是一樣的。

但是,在插入資料庫後,有時候會報錯(長度越界)。

public class StringLength {public static void main(String[] args) {System.out.println("測試".length());System.out.println("cs".length());}}

控制台顯示結果為:

22

但是在資料庫中,根據資料庫字元集的不同,漢字所佔的“位元”也不相同:

資料庫字元集 所佔位元
WE8ISO8859P1 1
AL32UTF8 3
ZHS16GBK 2

所以,當我們設定一個欄位username最長為3時,資料庫中必須這樣定義

WE8ISO8859P1 情況下    varchar(3)AL32UTF8 情況下             varchar(9)ZHS16GBK 情況下            varchar(6)
這就要求我們在定義表的時候考慮到應用情況。

那麼如何查看當前資料庫的字元集呢?

select * from nls_database_parameters;

當然,還需要注意,查看資料庫中字元長度和位元組長度的問題,因為varchar類型定義的長度為位元組長度。

varchar(3) 等價於 varchar(3 byte)

所以,執行下邊代碼會出現:

select length('測試') from dual;  --2select lengthb('測試') from dual; --4select length('cs') from dual;    --2select lengthb('cs') from dual;   --2



oracle中漢字顯示問題

加個n首碼比如n'中文‘試試

或者改變下當前資料庫的中文編碼
要想瞭解詳細的去這看看
www.cnblogs.com/...0.html
 
pl/sql中1個漢字所佔位元組長度為3的問題

問題癥結:

使用的字元集是UTF8,就會出現此錯誤!

你可以使用命令查看:

SQL> select * from v$nls_parameters where parameter='NLS_CHARACTERSET';

PARAMETER
------------------------------------------------
VALUE
------------------------------------------------
NLS_CHARACTERSET
AL32UTF8

解決方案:

建議使用ZHS16GBK字元集!

執行此操作後,問題即可得以解決。

SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL> ALTER DATABASE OPEN;
SQL> ALTER DATABASE CHARACTER SET AL32UTF8/ZHS16GBK;
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.