首页 > 解决方案 > 无法连接到末尾带有 CHAR(0) 的字符串

问题描述

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

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

结果:

"Hello World"
"Hello World

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

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

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

结果:


此外,当我从 DB 中将该值读入 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

标签: sqlsql-servervbscript

解决方案


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 中获取的字符串的长度。


推荐阅读