[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.
[20221012]简单探究nvarchar2数据类型存储.txt
来源:这里教程网
时间:2026-03-03 17:59:16
作者:
编辑推荐:
- [20221012]简单探究nvarchar2数据类型存储.txt03-03
- 散货海运拼箱出现“亏舱费”?该如何预防?03-03
- 记一次存储问题导致的rac故障案例03-03
- java反序列化漏洞及其检测03-03
- go语言逆向技术之---恢复函数名称算法03-03
- Oracle I/O设置说明文档03-03
- CVE-2022-22965漏洞分析03-03
- Hyperledger Cactus(一):架构初探03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 散货海运拼箱出现“亏舱费”?该如何预防?
散货海运拼箱出现“亏舱费”?该如何预防?
26-03-03 - 记一次存储问题导致的rac故障案例
记一次存储问题导致的rac故障案例
26-03-03 - java反序列化漏洞及其检测
java反序列化漏洞及其检测
26-03-03 - go语言逆向技术之---恢复函数名称算法
go语言逆向技术之---恢复函数名称算法
26-03-03 - Oracle I/O设置说明文档
Oracle I/O设置说明文档
26-03-03 - Hyperledger Cactus(一):架构初探
Hyperledger Cactus(一):架构初探
26-03-03 - RAC 修改监听端口
RAC 修改监听端口
26-03-03 - 数据库故障处理优质文章汇总(含Oracle、MySQL、MogDB等)
数据库故障处理优质文章汇总(含Oracle、MySQL、MogDB等)
26-03-03 - oracle数据库服务器slab内存故障
oracle数据库服务器slab内存故障
26-03-03 - log file sync等待事件处理思路
log file sync等待事件处理思路
26-03-03
