今天同事实现一个查询功能,不出结果,帮其查看后,发现是由于数据库字段类型定义问题,随笔记录下,望对大家有帮助。
1.char:
固定长度的字符数据类型。若数据库表定义了个char类型的字段,则该字段的长度为定义的固定长度
如:表tab定义字段tab_char类型为char(6),若写入值不够6个字节,则以空格补齐。
2.varchar2:
非固定长度的字符数据类型。若数据库表定义了个varchar2类型的字段,则该字段的长度是可变的。
如:表tab定义字段tab_varchar类型为varchar2(6),若写入值不够6个字节,则不会以空格补齐,保存的为实际值。
情景描述:
CREATE TABLE TAB1 (
ID NUMBER(5) not null,
TAB_CHAR CHAR(6),
TAB_VARCHAR VARCHAR2(6)
)
insert into TAB1(ID,TAB_CHAR,TAB_VARCHAR) values(1,2,2);
insert into TAB1(ID,TAB_CHAR,TAB_VARCHAR) values(2,3,3);
eg:
SELECT * FROM TAB1 WHERE TAB_CHAR =2;
结果:空
SELECT * FROM TAB1 WHERE TAB_VARCHAR =2;
结果:1条数据(查询出TAB_VARCHAR值为2的记录)
SELECT * FROM TAB1 WHERE TAB_CHAR ='2';
结果:1条数据(查询出TAB_CHAR值为2的记录)
SELECT * FROM TAB1 WHERE TAB_VARCHAR ='2';
结果:1条数据(查询出TAB_VARCHAR值为2的记录)
SELECT * FROM TAB1 WHERE trim(TAB_CHAR) =2;
结果:1条数据(查询出TAB_CHAR值为2的记录)
SELECT * FROM TAB1 WHERE trim(TAB_VARCHAR) =2;
结果:1条数据(查询出TAB_VARCHAR值为2的记录)
SELECT * FROM TAB1 WHERE trim(TAB_CHAR) ='2';
结果:1条数据(查询出TAB_CHAR值为2的记录)
SELECT * FROM TAB1 WHERE trim(TAB_VARCHAR) ='2';
结果:1条数据(查询出TAB_VARCHAR值为2的记录)
注;若在设计数据库字段类型时,若业务不需要固定长度,建议定义成varchar2类型较好。
----------------------------------------------------------------------------------------------------
走的太快了,停一停,让灵魂跟上脚步。
在物欲时代,消费占据了感官,也吞噬了个体生活。
******************* 我是阿木 *******************
----------------------------------------------------------------------------------------------------