似乎 DB2 和 Oracle 通过在右边用空格填充较短的字符串来实现字符比较。但为什么?
如果数据库引擎修剪较大的字符值而不是用空格填充较短的字符值不是更好吗?即,如果我的查询是SELECT * from SOME_TABLE where CUSTOMER_NAME = 'Popeye '
,数据库引擎最终会在每一行中添加空格SOME_TABLE
,而它本可以修剪此处传递的值,即'Popeye '
另外,只是想知道为什么 Oracle 和 DB2 只在右边添加空格?
您混淆了不同类型的角色以及正在发生的事情。当你执行:
SELECT * from SOME_TABLE where CUSTOMER_NAME = 'Popeye '
“SOME_TABLE 中的每一行”都没有添加空格。唯一的问题是结果的宽度。此宽度由 SOME_TABLE 中列的属性设置,而不是由 WHERE 子句中出现的内容设置。
如果您的 CUSTOMER_NAME 被声明为 char(x) 值,则字符串必须具有该长度。说,它是char(10)
,你将“大力水手”分配给它。该值有六个字符,并且必须以某种方式填充到 10。SQL 标准是在右侧填充,使值'Popeye '
.
如果您想要可变长度字符串,请使用 varchar 或 varchar2。