系统间CachéSQL。用espaces跟随与用espaces引导的不同行为

系统间CachéSQL。用espaces跟随与用espaces引导的不同行为,sql,intersystems-cache,trailing,intersystems,objectscript,Sql,Intersystems Cache,Trailing,Intersystems,Objectscript,鉴于: 具有ID和描述列的表tA Description是一个字符串列。 该表的内容如下: ID | |描述 1 | |弦1 2 | |弦2 3 | |弦3 如果执行以下SQL查询: 从tA中选择ID,其中Description='String2'按预期返回2 但是: 如果执行以下SQL查询: 从tA中选择ID,其中Description='String2'尾随空格,它还返回2!因为这是一个精确的比较,所以它应该不返回任何值 如果执行以下SQL查询: 从tA中选择ID,其中Description

鉴于:

具有ID和描述列的表tA Description是一个字符串列。 该表的内容如下:

ID | |描述 1 | |弦1 2 | |弦2 3 | |弦3

如果执行以下SQL查询: 从tA中选择ID,其中Description='String2'按预期返回2

但是:

如果执行以下SQL查询: 从tA中选择ID,其中Description='String2'尾随空格,它还返回2!因为这是一个精确的比较,所以它应该不返回任何值

如果执行以下SQL查询: 从tA中选择ID,其中Description='String2'以空格开头,按预期返回NONE

你知道这种行为差异的原因是什么吗


提前感谢。

您需要在列名周围使用%EXACT。这应该不会返回任何记录:从tA中选择ID,其中%EXACTDescription='String2'

我不能说缓存,但这是SQL92标准中规定的数据库中的常见行为:在比较之前填充字符串,使其具有相同的长度-通常这意味着忽略尾随空格,而不忽略前导空格。大概这样做是为了方便使用固定宽度的字符类型