转自:
http://topic.csdn.net/u/20090326/09/d8c05960-4c7f-49ef-900d-04a1ef1eb024.html
大家可能都知道,数据库的varchar字段在保存中文时,字段最大长度和可以保存的字符的最大数量可能是不相等的。
在Oracle中,varchar(100)可以保存50个纯汉字或100个纯字母或者数字。如果希望长度100的varchar保存100个汉字,可以将字段类型设置为nvarchar(这个不太确定,但是oracle确实有这个功能。n表示国际化的意思)
而在db2尤其是as400服务器下的db2,是怎么个情况,今天我们进行了一下测试。下面是测试报告:
数据库VARCHAR字段长度设置测试报告
测试时间:2009-01-16 14:00
测试用例:
数据库表:UserInfo 字段:password varchar(32)
操作记录:
执行SQL:
insert into usrinfo(id,usr_id,password) values('xxxx','xxxx','我使中国热我使中国热我使中国热我'); --失败 16汉字
insert into usrinfo(id,usr_id,password) values('xxxx','xxxx','我使中国热我使中国热我使中国热'); --成功 15汉字
update usrinfo set password='我使中国热我使中国热我使中国热1' where id='xxxx'; --失败 15汉字1数字
update usrinfo set password='我使中国热我使中国热我使中国热a' where id='xxxx'; --失败 15汉字1字母
update usrinfo set password='012345678901234567890123456789' where id='xxxx'; --成功 30数字
update usrinfo set password='01234567890123456789012345678901' where id='xxxx'; --成功 32数字
update usrinfo set password='012345678901234567890123456789我' where id='xxxx'; --失败 30数字1汉字
update usrinfo set password='0123456789我使中国热0123456789' where id='xxxx'; --成功 20数字5汉字
select length(password) from usrinfo where usr_id='xxxx' ---32
update usrinfo set password='0我1使2中3国4热' where id='xxxx'; --成功
select length(password) from usrinfo where usr_id='xxxx' ---25
结论:
1 每个汉字占用2个字符空间
2 每段汉字再额外占用2个字符空间(可能是辨别标识?)
3 每个字母或数字占用1个字符空间
----->假设需要保存1000个字(汉字、字母、数字都允许),那么数据库字段最少的长度应该是:
最极限的情况是:单个汉字和字母(数字)连续间隔出现,即形式如下:
汉1字2是3好a.......(假设总字符数是x,x是偶数)
那么汉字个数是x/2,字母数字个数是x/2,为保证该字段的insert和update不报错,字段最少的长度是===>
x/2*2 汉字占用字符数
+
x/2*1 字母数字占用字符数
+
x/2*2 每段汉字占用的标识位数
=2.5x
===================>>>所以,如果需求要求可输入1000个字符,那么数据库保证不出错误的长度应该是2500,而不是我们通常认为的2000!!
分享到:
相关推荐
DB2异常汇总-中文
ppt文档,已压缩成PDF文件,对V97整体架构做了描述,包括存储、分区、备份、XML应用、高可用性等功能,适用于DB2初学者,售前支持,或对V97新功能不熟悉的管理员。
第 1章 – DB2 Express-C是什么?..........................................................................................13 1.1免费开发、部署和分发… 无限制!.............................................
第 1章 – DB2 Express-C是什么?..........................................................................................13 1.1免费开发、部署和分发… 无限制!.............................................
学习如何创建 DB2 数据库,以及存储表、索引、和数据的不同机制。本教程主要关注分区、压缩和 XML 方面的知识。 • 第 3 部分:数据访问 本教程将带领您学习管理 DB2 对象的各个步骤,其中包括索引、约束、参照完整...
最佳实践 面向联机事务处理 OLTP 环境的物 理数据库设计 v 版权所有 IBM Corp 2008 2011 目录 图表 8 执行摘要 1 物理数据库设计简介 3 OL TP 工作负载特征 5 物理数据库设计 7 ...DB2 pureScale 特性 ...
由于IBM产品中文帮助很少,所以上传该文档供大家学习使用。
该压缩文件中加入了查看存储过程时,中文注释为乱码的解决办法(通过修改DBVisualizer的字体)。 该工具简介如下: DbVisualizer是一个完全基于JDBC的跨平台数据库管理工具,内置SQL语句编辑器(支持语法高亮),...
Oracle是基于对象的关系型数据库,Oracle也是用表的形式对数据存储和管理,并且在Oracle的操作中添加了一些面向对象的思想。Oracle数据库是Oracle(中文名称叫甲骨文)公司的核心产品,Oracle数据库是一个适合于大中...
支持Oracle,Sybase ASE, IBM,DB2/UDB, MicrosoftSQL Server,MySQL 和ODBC数据源。 可以看到库中有多少表、多少存储过程、多少触发器、多少视图、多少函数,可以直接看到每个表的数据行数,可以导出查询结果的insert...
Oracle是基于对象的关系型数据库,Oracle也是用表的形式对数据存储和管理,并且在Oracle的操作中添加了一些面向对象的思想。 Oracle数据库是Oracle(中文名称叫甲骨文)公司的核心产品,Oracle数据库是一个适合于大...
第19章 使用存储过程 第20章 管理事务处理 .第21章 使用游标 第22章 了解高级sql特性 附录a 样例表脚本 a.1 样例表 a.2 获得样例表 a.2.1 下载可供使用的microsoft access mdb文件 ...
大型数据库如:Oracle,Sybase,MS SQL,DB2 中型数据库MS_Access,MySQL 桌面型数据库Paradox,DBF系列数据库,MS Execl,Text,可以直接托放解释 其他支持SQL 92标准的数据库 2. 遍历数据库中表、视图、存储...
IBM DB2 130 保护网络通信 130 保护客户端服务器通信 131 使用 SecureICA 132 启用 SSL/TLS 协议 132 配置会话数据加密 133 为 ICA 加密设置策略 134 配置服务器和客户端之间的 SSL/TLS 134 实现 SSL Relay 的任务...
大型数据库如:Oracle,Sybase,MS SQL,DB2 中型数据库MS_Access,MySQL 桌面型数据库Paradox,DBF系列数据库,MS Execl,Text,可以直接托放解释 其他支持SQL 92标准的数据库 2. 遍历数据库中表、视图、存储...
8、查看DB2存储过程源代码的SQL 380 9、获取建表脚本 380 10、获取DB2数据库日志操作方法 380 二十一、LINUX相关 383 1、从命令模式切换到视图模式 383 二十二、TDS相关 383 1、LINUX下启动TDS管理界面 383 2、LINUX...
符合J2EE标准,可运行在各主流的J2EE服务器上,如:Tomcat,WebLogic,WebSphere,JBoss 提供多种用户存储模式,包括:文本,多种数据库(MySQL,Oracle,SQLServer,DB2,Sybase),LDAP 等存储模式 内置了强大的...
中文系统上重装SQL Server 2005 英文版的问题 (转)使用公用表表达式的递归查询(SQLSERVER2005) 2005Beta2概览 sql server 2005 建立链接服务器 SQL Server 2005:数据类型最大值 SQL Server 2005:向系统表说...
" " " "支持中文汉字内码,符合双字节编码; " " " "数据库产品应具有良好的图形化用户界面(GUI) " " " ",方便对数据库进行管理/数据库应具有良好的自 " " " "我管理,自我配置与自我调优能力 " " " "除了支持...