CHAR类型列上具有相等谓词的查询中没有返回数据[关闭]

Posted

技术标签:

【中文标题】CHAR类型列上具有相等谓词的查询中没有返回数据[关闭]【英文标题】:No Data Returned in Query with Equal Predicate on a CHAR Type Column [closed] 【发布时间】:2015-07-22 08:42:43 【问题描述】:

这是我的代码,我在 oracle 中有一个名为产品 ID 和数据类型为 CHAR(6 字节)的列。我已为此列使用 set string 方法从数据库中检索详细信息。实际上我得到的结果集为假(它有空)并且没有获取记录。但是当我使用 'PRODUCT_ID="+value+"' 时,它可以工作。如何解决这个问题..

sSQL="SELECT * FROM CART_VIEW WHERE PRODUCT_ID=? AND  PRODUCT_NAME=? ";
ps=conn.prepareStatement(sSQL);
ps.setString(++i, sProductId);
ps.setString(++i, sProductName);
rs=ps.executeQuery();

【问题讨论】:

【参考方案1】:

CHAR(6) 列格式意味着(与 VARCHAR2 格式相反)短于 6 个字节的字符串被空白填充。 IE。您必须为字符串提供与列的确切长度相同的尾随空格。

例如,如果您在列XX CHAR(6) 中插入“X”

 -- returns nothing
 select * from test where xx = 'X'; 

 -- returns a row
 select * from test where xx = 'X     '; 

即你必须传入 setString 完整长度的字符串。

【讨论】:

它适用于轰炸机。您的解释也有助于理解这个概念 @muthu 欢迎您!一般来说,如果你有一个可变长度的键,通常的格式是 VARCHAR2(即使是为了避免这种填充问题)。

以上是关于CHAR类型列上具有相等谓词的查询中没有返回数据[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

子查询谓词核心数据

GlobalMapper精品教程049:空间查询方法(谓词)汇总

PHP 和 MYSQL:查询在具有值的列上返回 null

为啥没有 Linq 方法通过谓词返回不同的值?

具有 CSV 值的列上的 JPA 查询 IN 子句未返回确切结果

不支持没有相等谓词的流流连接