无法连接到结尾为CHAR(0)的字符串

时间:2019-04-11 20:03:40

标签: sql sql-server vbscript

以下代码片段应演示我在SQL Server和VBScript Web应用程序中都观察到的问题:

SELECT '"Hello World"'
SELECT '"Hello World' + CHAR(0) + '"'

结果:

"Hello World"
"Hello World

请注意,第二个结果行缺少最后的双引号。

我知道您不能在SQL Server中将字符串连接为NULL值。但是,下面的代码片段揭示了就SQL Server而言,CHAR(0)不被视为NULL。

SELECT ISNULL(CHAR(0), 'CHAR(0) IS CONSIDERED NULL')

结果:


此外,当我从数据库读取该值到VBScript中的变量中时,我也无法连接到该变量。

我不是C开发人员,但我知道C样式的字符串以空字符终止。这相关吗?有人可以帮我理解为什么在SQL Server和VBScript中会发生这种情况吗?

我可以通过简单地替换有问题的数据中的所有CHAR(0)来解决我的紧迫问题,但首先,我想了解其原因并制定预防性解决方案。


编辑:包括一些VBScript

testSql = "SELECT '""Hello World' + CHAR(0) + '""' AS TestString"
set resultSet = conn.execute(testSql)
testString = resultSet.Fields.Item("TestString")

testString = testString & "}"

Response.Write testString

结果:

"Hello World

1 个答案:

答案 0 :(得分:1)

SQL Server将以nul字符结尾的字符串连接在一起就很好了。参见以下示例:

SELECT len('"Hello World' + CHAR(0) + '"')

输出:

14

SELECT len('“” Hello World“ + CHAR(0)+'”'+'“ Hello World'+ CHAR(0)+'”')

输出:

28

首先将字符串存储到CTE或表中时,结果是相同的。

它在VB中的处理和输出使其看上去好像没有。尝试打印在VB中退出SQL的字符串的长度。