admin

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

sql

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

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

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


阅读 227

收藏
2021-07-01

共1个答案

admin

您会混淆不同类型的字符以及正在发生的事情。执行时:

SELECT * from SOME_TABLE where CUSTOMER_NAME = 'Popeye '

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

如果您的CUSTOMER_NAME被声明为char(x)值,则字符串必须具有该长度。假设是char(10),您为其分配了“
Popeye”。该值有六个字符,因此必须以某种方式将其填充为10。SQL标准是在右边填充值'Popeye '

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

2021-07-01