一次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轉義字元Oracle字元
- Oracle 特殊字元轉義Oracle字元
- 字元編碼轉換字元
- 一次DG故障診斷過程分析
- 記一次詭異的Oracle查詢轉換Oracle
- atc轉換過程問題記錄
- 一次Oracle監聽無法動態註冊處理過程排查分析Oracle
- URL地址特殊字元轉換字元
- Oracle轉換PostgresOracle
- mybatis-spring原始碼分析-一次insert過程MyBatisSpring原始碼
- 【轉】交換機開發(二)—— 三層交換機報文轉發過程
- 一次「找回」TraceId的問題分析與過程思考
- 記一次VMware的崩潰除錯分析過程除錯
- Oracle 查詢轉換Oracle
- pyhanlp 繁簡轉換之拼音轉換與字元正則化HanLP字元
- 記一次Oracle分割槽表全域性索引重建的過程Oracle索引
- oracle索引核心過程Oracle索引
- Oracle儲存過程Oracle儲存過程
- php過濾html標籤、特殊字元、轉義字元PHPHTML字元
- 記一次bug解決過程(數字轉化成中文)
- 一次透過dump檔案分析OutOfMemoryError異常程式碼定位過程Error
- 記一次開啟資料庫慢原因分析過程資料庫
- js視訊轉字元畫 —— 寫一個屬於自己的字元轉換器JS字元
- 一次難忘的協助解決Oracle RAC恢復過程Oracle
- Oracle實驗(02):轉換 & 轉譯Oracle
- CSS text-transform字元大小寫轉換CSSORM字元
- 資料轉換-16進位制字元字元
- IPv6轉換過程中有哪些安全防護措施?
- oracle邏輯讀過程Oracle
- oracle的儲存過程Oracle儲存過程
- Oracle儲存過程-1Oracle儲存過程
- 記一次簡單的Oracle離線資料遷移至TiDB過程OracleTiDB
- Oracle 12CR2查詢轉換之星型轉換Oracle
- 4-字元轉換及所在位置字元
- Java如何將字串轉換為字元陣列?Java字串字元陣列
- js做資料的轉義字元替換JS字元
- 2020-11-13整數轉換為字串 字元反轉字串字元
- 記一次透過Memory Analyzer分析記憶體洩漏的解決過程記憶體