Orcale无奈的Char与Varchar

最近在做一个项目,可能是因为要数据对齐,一开始把数据库所有的字符全都定义成了固定长度的Char类型,这样导致长度不足的数据包含N多空格,在做测试Demo的时候就发现各种不爽了,很多可以在PLSQL里欢快的SQL用程序跑的话一准各种迷茫,现在整理总结一下,前车之鉴吧:
(环境是VS2010 .net 4.0 和ORacle 10G)

1.Oracle 字段Char定义时,如果包含空格,应该Trim后在使用。
假定一个char 类型的开头或者结尾字段包含一个或多个空格,代码中应该也保证这些空格的存在,特别是查询的时候。

苦逼的是俩句话在PL——SQL中效果是一样的,搬进代码里就不是一个爹妈了。

苦逼的是俩句话在PL——SQL中效果是一样的,搬进代码里就不是一个爹妈了。
例如:


select * from PARS_EVALUATION t
where t.id = 'd2887a3d-e68a-4e3a-9473-27019ba7db7 '

<!-- lang: sql -->
select * from PARS_EVALUATION t
where TRIM(t.id) = 'd2887a3d-e68a-4e3a-9473-27019ba7db7'

2.SQL参数设定时,对于Char类型应使用 DbType.StringFixedLength (nchar) 或者 DbType.AnsiStringFixedLength(char) ,如果非要使用 DbType.String 话,对不起就擎等着麻烦吧(遇到空格包挂)。
例如:


_BlockName = "InsertSQL";
<!-- lang: c# -->
_TargetName = "Insert";
<!-- lang: c# -->
 parameters.Add(new DBParameter(":V_ID", Guid.NewGuid().ToString(), DbType.AnsiStringFixedLength));

你可能感兴趣的:(oracle,char)