验证数据在Oracle中的存储
来源:互联网 发布:奇葩搞笑淘宝买家秀 编辑:程序博客网 时间:2024/06/03 22:43
做软件测试,常常需要验证数据在数据库中是否按照指定的字符集正确存储。常规的做法是用客户端查询,检查显示是否正常,这种做法是不正确的。
以Oracle为例,谈到字符集有三个概念,客户端字符集、数据库字符集和NLS_LANG字符集。写入数据的时候,Oracle将客户端提交的数据按照NLS_LANG的字符集转换为数据库字符集进行存储;而读出的时候,Oracle将数据转换为NLS_LANG的字符集进行输出。
据个例子,假设客户端字符集为GBK,NLS_LANG字符集为UTF-8,Oracle字符集也是UTF-8,这样数据入库的时候Oracle将不对数据的编码进行转换,致使UTF8的数据库中实际存储的是GBK的数据;而出库的时候,Oracle同样不进行转换,致使我们在客户端依然能够看到显示正常的数据。所以我们如果用客户端来做这个测试,就发现不了问题。
就这个例子本身来说,NLS_LANG的字符集也应该设置为GBK,这样整个过程就正确了。当然,说这个有点悖离这篇文章的初衷了。这篇文章的初衷是要介绍一个简单的测试方法。
测试这类问题时,最简单的方法莫过于使用Oracle的dump函数,这样可以直接看到数据在数据库中存储的编码。假设数据库URLContent编码为UTF-8,我们希望验证URLTitle这个字段存储的方式是否正确,就可以这么办:
select dump(URLTitle, 16) from URLContent where URLName like '%8974194%';
其中“where URLName like '%8974194%'”是为了使输出结果唯一。
检索结果输出:
DUMP(URLTITLE,16)
--------------------------------------------------------------------------------
Typ=1 Len=36: e5,ae,b6,e7,94,b5,e4,b8,8b,e4,b9,a1,e8,9b,8b,e7,b3,95,e5,86,9c,e6,
b0,91,e8,bf,98,e9,9a,be,e5,90,83,e5,88,b0
是十六进制的编码序列,接下来我们只需要借助其它工具,如UltraEdit获取字符串“家电下乡蛋糕农民还难迟到”的UTF8编码序列,将两者对比获取对比结果就可以了。
- 验证数据在Oracle中的存储
- Oracle 验证IOT表数据存储在主键里
- 浅析Oracle存储过程触发器在数据同步中的应用
- Oracle的索引在数据库中的存储
- 存储在 Oracle 地理数据库中的系统表
- 存储过程在数据操作中的重要作用
- 大数据在数据库中的存储
- 数据在计算机内存中的存储
- 浮点数据在计算机中的存储方式
- 数据在计算机中的存储方式
- int类型数据在计算机中的存储
- oracle存储过程,存储过程,以及在java中的调用
- 如何评估oracle AWR 的在oracle 中的存储情况
- 在SQLSERVER中读取Oracle中的数据
- 使用存储过程读取Oracle中的clob字段的数据
- 把XML文件中的数据存储到Oracle数据库
- 在oracle存储过程中返回数据集
- Oracle java存储过程在sqlplus中的调试信息显示
- C#实现WAP网站二级联动
- 提高 SQL 性能的方法
- 谏太宗十思疏
- oracle 存储过程的基本语法 及注意事项
- typedef
- 验证数据在Oracle中的存储
- 解析Tomcat下应用JMS开发技巧
- 《暖春》分集简介
- 将WinCE5.0模拟器连接到VS2005/VS2008
- SWFObject 2.0
- 北风那个吹剧情简介
- 基于WinCE模拟器的应用程序调试
- Awk、Grep/Sed/Awk组合及Perl进行文本处理性能比较
- About GridView