[20221012]簡單探究nvarchar2資料型別儲存.txt
[20221012]簡單探究nvarchar2資料型別儲存.txt
--//自己對於nvarchar2資料型別不是很瞭解,簡單探究看看.
--//我以前僅僅知道數字與字母佔用2個字元,比如A ascii碼65(0x41),如果採用nvarchar2,儲存變成0x00 0x41.
--//另外nvarchar2資料型別我不知道是否與字符集有關,順便也做一個探究.
1.環境:
$ env | grep NLS
NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
NLS_TIME_TZ_FORMATx=HH24.MI.SSXFF TZH:TZM
NLS_TIMESTAMP_TZ_FORMAT=YYYY-MM-DD HH24:MI:SS.FF TZH:TZM
NLS_TIMESTAMP_FORMAT=YYYY-MM-DD HH24:MI:SS.FF
NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS
SCOTT@book> @ ver1
PORT_STRING VERSION BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
CREATE TABLE t1
AS
SELECT object_id
,object_name
,CAST (object_name AS NVARCHAR2 (128)) vobject_name
FROM all_objects where rownum<=3;
SCOTT@book> alter table t1 modify VOBJECT_NAME not null ;
Table altered.
update t1 set object_name='測試中文',vobject_name='測試中文' where rownum=1;
commit ;
alter system checkpoint;
alter system checkpoint;
SCOTT@book> select rowid from t1 where rownum=1;
ROWID
------------------
AABR50AAEAAABHjAAA
SCOTT@book> @ rowid AABR50AAEAAABHjAAA
OBJECT FILE BLOCK ROW ROWID_DBA DBA TEXT
---------- ---------- ---------- ---------- -------------------- -------------------- ----------------------------------------
335476 4 4579 0 0x10011E3 4,4579 alter system dump datafile 4 block 4579
2.透過bbed觀察:
$ export NLS_LANG=AMERICAN_AMERICA.US7SACII
--//方便bbed檢視中文漢字.
BBED> set dba 4,4579
DBA 0x010011e3 (16781795 4,4579)
BBED> x /rncx *kdbr[1]
rowdata[44] @8136
-----------
flag@8136: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8137: 0x00
cols@8138: 3
col 0[2] @8139: 46
col 1[7] @8142: I_USER1
col 2[14] @8150: 0x00 0x49 0x00 0x5f 0x00 0x55 0x00 0x53 0x00 0x45 0x00 0x52 0x00 0x31
BBED> x /rnxx *kdbr[1]
rowdata[44] @8136
-----------
flag@8136: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8137: 0x00
cols@8138: 3
col 0[2] @8139: 46
col 1[7] @8142: 0x49 0x5f 0x55 0x53 0x45 0x52 0x31
col 2[14] @8150: 0x00 0x49 0x00 0x5f 0x00 0x55 0x00 0x53 0x00 0x45 0x00 0x52 0x00 0x31
--//你可以發現英文字元nvarchar2編碼前面每個多了0x00,這樣佔用空間會加倍.
BBED> x /rncx *kdbr[0]
rowdata[0] @8092
----------
flag@8092: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8093: 0x02
cols@8094: 3
col 0[2] @8095: 20
col 1[8] @8098: 測試中文
col 2[8] @8107: 0x6d 0x4b 0x8b 0xd5 0x4e 0x2d 0x65 0x87
BBED> x /rnxx *kdbr[0]
rowdata[0] @8092
----------
flag@8092: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8093: 0x02
cols@8094: 3
col 0[2] @8095: 20
col 1[8] @8098: 0xb2 0xe2 0xca 0xd4 0xd6 0xd0 0xce 0xc4
col 2[8] @8107: 0x6d 0x4b 0x8b 0xd5 0x4e 0x2d 0x65 0x87
---//而中文漢字的編碼nvarchar2有點奇怪.
3.我看了我以前建立測試資料庫的指令碼,執行如下:
# mkdir -p /mnt/ramdisk
# mount -t tmpfs -o size=8G tmpfs /mnt/ramdisk
# su - oracle
--//檢查環境變數是否設定正確
$ env | grep -i oracle
USER=oracle
LD_LIBRARY_PATH=/u01/app/oracle/product/11.2.0/db_1/lib:/u01/app/oracle/product/11.2.0/db_1/oracm/lib:/lib:/usr/lib:/usr/local/lib:/lib64:/usr/lib64:/usr/local/lib64
ORACLE_BASE=/u01/app/oracle
PATH=.:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/NX/bin:/home/oracle/bin:/home/oracle/bin:/u01/app/oracle/product/11.2.0/db_1/bin
HOME=/home/oracle
LOGNAME=oracle
ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
$ echo $NLS_LANG
AMERICAN_AMERICA.zhs16gbk
$ export ORACLE_SID=book
$ORACLE_HOME/bin/dbca -createDatabase -templateName General_Purpose.dbc -gdbName test -sid test -sysPassword oracle \
-systemPassword oracle -storageType FS -characterSet ZHS16GBK -nationalCharacterSet AL16UTF16 -listeners LISTENER -sampleSchema true -totalMemory 800 \
-databaseType MULTIPURPOSE -silent -datafileDestination /mnt/ramdisk
--//-characterSet ZHS16GBK -nationalCharacterSet AL16UTF16,我建立的生產系統也是使用這樣的字符集.
--//感覺這個nvarchar2型別與-nationalCharacterSet AL16UTF16有關.換一個引數看看.另外寫一篇blog.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2917920/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [20160624]慎用nvarchar2資料型別.txt資料型別
- MYSQL 資料型別儲存-數值型MySQL 資料型別
- redis-4.資料儲存型別Redis型別
- MYSQL-資料型別儲存-DATEMySql資料型別
- JavaScript中的資料型別-儲存差別JavaScript資料型別
- 簡單分析oracle的資料儲存Oracle
- Oracle基本資料型別儲存格式淺析——RAW型別Oracle資料型別
- PHP memcached 各種資料型別儲存PHP資料型別
- oracle資料型別與儲存結構Oracle資料型別
- [20191219]oracle timestamp資料型別的儲存.txtOracle資料型別
- java簡單資料型別(轉)Java資料型別
- 【資料庫】資料庫儲存元素型別基礎資料庫型別
- Oracle基本資料型別儲存格式淺析(五)——RAW型別Oracle資料型別
- Redis的資料型別——探究竟Redis資料型別
- [20151119]nvarchar2型別.txt型別
- Oracle 資料型別CHAR, NCHAR, VARCHAR2, NVARCHAR2Oracle資料型別
- 不簡單的基本資料型別資料型別
- Oracle基本資料型別儲存格式淺析(四)——ROWID型別Oracle資料型別
- Oracle基本資料型別儲存格式淺析(三)——日期型別(一)Oracle資料型別
- Oracle基本資料型別儲存格式淺析(三)——日期型別(二)Oracle資料型別
- Oracle基本資料型別儲存格式淺析(三)——日期型別(三)Oracle資料型別
- Oracle基本資料型別儲存格式淺析(三)——日期型別(四)Oracle資料型別
- [20241009]oracle timestamp with time zone資料型別的儲存.txtOracle資料型別
- Oracle基本資料型別儲存格式淺析[zt]Oracle資料型別
- Oracle 儲存型別Oracle型別
- 1、變數和簡單資料型別變數資料型別
- Oracle基本資料型別儲存格式淺析(二)——數字型別Oracle資料型別
- Mybatis讀取和儲存json型別的資料MyBatisJSON型別
- 簡單資料型別和引用資料型別對應棧和堆示意圖資料型別
- python:變數和簡單資料型別Python變數資料型別
- javascript資料型別轉換簡單介紹JavaScript資料型別
- [20240529]簡單探究FREE LISTS列表.txt
- Redis常用資料型別及其儲存結構(原始碼篇)Redis資料型別原始碼
- 資料庫儲存時間到底該用什麼型別?資料庫型別
- Redis(一):基本資料型別與底層儲存結構Redis資料型別
- double型別資料在記憶體中中儲存格式型別記憶體
- oracle資料型別data type與儲存空間大小(一)Oracle資料型別
- oracle資料型別data type與儲存空間大小(二)Oracle資料型別