SQL - 为什么在比较字符时填充空格?

时间:2012-09-25 15:03:05

标签: sql oracle db2

似乎DB2和Oracle通过用右边的空格填充较短的字符串来实现字符比较。但为什么呢?

如果数据库引擎修剪了较大的字符值而不是用空格填充较短的字符值,那会不会更好?即  如果我的查询是SELECT * from SOME_TABLE where CUSTOMER_NAME = 'Popeye ',则数据库引擎最终会向SOME_TABLE中的每一行添加空格,相反,它可能会修剪此处传递的值,即'Popeye '

另外,只是好奇地理解为什么Oracle和DB2只在右边添加空格?

1 个答案:

答案 0 :(得分:3)

您会混淆不同类型的角色和正在发生的事情。执行时:

SELECT * from SOME_TABLE where CUSTOMER_NAME = 'Popeye '

“SOME_TABLE中的每一行都没有添加空格”。唯一的问题是结果的宽度。此宽度由SOME_TABLE中列的属性设置,而不是由WHERE子句中显示的内容设置。

如果您的CUSTOMER_NAME被声明为char(x)值,则该字符串必须具有该长度。比如说,它是char(10)并且您将“大力水手”分配给它。该值有六个字符,必须以某种方式填充为10。 SQL标准是在右侧填充,使值'Popeye '

如果需要可变长度字符串,请使用varchar或varchar2。