一次ORACLE字元轉換分析過程
在aix資料庫上建立如下表時,varchar2欄位型別變成了varchar2( char);
和varchar2( char) 的區別
varchar2(byte)/varchar2() :就是預設的表示方式,比如我們寫成:varchar2(100),就相當於varchar2(100 byte),表示最大位元組數是100,該欄位最多能容納100個位元組,強調空間大小。由於我們描述的是位元組,因此,儲存漢字等字元時,就要小心了。如果你的資料庫用的是GBK編碼,那麼一個漢字將佔用2個位元組,最多能存50個漢字,如果你的資料庫用的是UTF8編碼,那麼一個漢字將佔用3個位元組,最多能存33個漢字。
varchar2(char) :表示最大字元數是100,該欄位最多能容納100個字元,強調個數。假設我們寫成varchar2(100 char),那麼無論是數字、字母、漢字,都看成一個字元,最多寫100個,當然,漢字越多,佔用的空間越大,同樣遵循上邊的資料庫編碼原則。例如:存入一個漢字,底層佔2或3個位元組,存入一個字母,佔1個位元組,絕對不是某些文章所說1個字母或數字也佔2或3個位元組!
varchar2() 和varchar2() 的字元數量最大都是4000,即varchar2(4000)和varchar2(4000)是一樣的,但是在其他情況下,比如varchar2(40 char) >= varchar2(40) ,如果從varchr2(40 cahr) 的表匯出資料到varchar2(40) 將可能導致匯入報錯:ORA-12899 欄位長度不夠。
導致該問題的原因是nls_length_semantics引數的設定。
set line 150
|
實驗:
實驗新建使用者troy,新建兩張表,test1在nls_length_semantic=char情況下建立,test6在nls_length_semantic=byte情況下建立。
實驗情況如下:
nls_length_semantics 為char的情況:
nls_length_semantics 為byte的情況:
從dbms包取出來的建表語句也可反映出這種差別;
查詢實驗
下面的實驗為補充實驗,分別在nls_length_semantic=char 和nls_length_semantic=byte的情況下,在plsql中查詢對應表的建表語句:
##test1 是在char的時候建立,test6是在 byte的情況下建立:
這個比較有意思:
4.2.1 使用dbms 包查詢:
在nls_length_semantic=char 和nls_length_semantic=byte 的情況是一樣的,如下圖:
4.2.2 使用右鍵檢視建立sql 的方式
在nls_length_semantic=byte的情況下
在nls_length_semantic=char的情況下:有了varchar2(byte)這個型別
1 建議linux資料庫nls_length_semantic變數和aix資料庫保持一致。畢竟aix生產庫已經有大量資料。更改較為麻煩;命令如下:
alter system set nls_length_semantic=char; shutdown immediate; startup;
|
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23732248/viewspace-2770886/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 記一次ORACLE的UNDO表空間爆滿分析過程Oracle
- ORACLE 死鎖分析過程Oracle
- 一次DG故障診斷過程分析
- javascript 字元轉換為ascii碼,ascii碼轉換為字元JavaScript字元ASCII
- 一次分析的全過程,和大家交流
- 字元編碼轉換字元
- 字元型別轉換字元型別
- atc轉換過程問題記錄
- 一次Oracle資料庫恢復過程Oracle資料庫
- 一次壞塊的處理過程 [轉]
- 一次Linux系統被***的分析過程Linux
- AIX下字元介面安裝oracle 10g過程AI字元Oracle 10g
- RS6000 更換硬碟的過程(轉)硬碟
- URL地址特殊字元轉換字元
- java字元編碼轉換Java字元
- 數值轉換為字元字元
- 一次Oracle監聽無法動態註冊處理過程排查分析Oracle
- ORACLE建庫過程與操作(轉)Oracle
- oracle轉義字元Oracle字元
- oracle字符集轉換分析工具Oracle
- 資料轉換衝突及轉換過程中大物件的處理物件
- 記一次VMware的崩潰除錯分析過程除錯
- 一次資料庫硬解析的分析全過程資料庫
- 記一次RAC Brain Split腦裂分析過程AI
- 風險管理過程分析法(轉載)
- 記一次詭異的Oracle查詢轉換Oracle
- PHP資料型別轉換(字元轉數字,數字轉字元)PHP資料型別字元
- 從sybase的儲存過程轉向oracle的儲存過程儲存過程Oracle
- javascript字元編碼轉換方法JavaScript字元
- iconv字元編碼轉換字元
- 一次透過dump檔案分析OutOfMemoryError異常程式碼定位過程Error
- (轉)如何oracle除錯儲存過程Oracle除錯儲存過程
- mybatis-spring原始碼分析-一次insert過程MyBatisSpring原始碼
- 一次「找回」TraceId的問題分析與過程思考
- 記一次開啟資料庫慢原因分析過程資料庫
- 一次Linux系統被攻擊的分析過程Linux
- 一次Linux伺服器被hack的過程分析Linux伺服器
- oracle小版本升級patch過程和分析Oracle