无法连接到末尾带有 CHAR(0) 的字符串
Can't concatenate to strings with CHAR(0) at the end
以下片段应该展示我在 SQL 服务器和我的 VBScript 网络应用程序中观察到的问题:
SELECT '"Hello World"'
SELECT '"Hello World' + CHAR(0) + '"'
结果:
"Hello World"
"Hello World
请注意,第二个结果行缺少最后的双引号。
我知道您不能在 SQL 服务器中将字符串连接到 NULL 值。但是,以下代码片段表明,就 SQL 服务器而言,CHAR(0) 不被视为 NULL。
SELECT ISNULL(CHAR(0), 'CHAR(0) IS CONSIDERED NULL')
结果:
此外,当我从数据库中将此值读入 VBScript 中的变量时,我也无法连接到该变量。
我不是 C 开发人员,但我知道 C 风格的字符串以空字符结尾。这有关系吗?有人可以帮我理解为什么 SQL 服务器和 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
SQL 服务器连接以 nul 字符结尾的字符串就好了。看这个例子:
SELECT len('"Hello World' + CHAR(0) + '"')
输出:
14
SELECT len('"Hello World' + CHAR(0) + '"' + '"Hello World' + CHAR(0) + '"')
输出:
28
将字符串存储到 CTE 或先 table 时结果相同。
VB 中的处理和输出使它看起来好像没有。尝试在 VB.
中打印出 SQL 的字符串长度
以下片段应该展示我在 SQL 服务器和我的 VBScript 网络应用程序中观察到的问题:
SELECT '"Hello World"'
SELECT '"Hello World' + CHAR(0) + '"'
结果:
"Hello World"
"Hello World
请注意,第二个结果行缺少最后的双引号。
我知道您不能在 SQL 服务器中将字符串连接到 NULL 值。但是,以下代码片段表明,就 SQL 服务器而言,CHAR(0) 不被视为 NULL。
SELECT ISNULL(CHAR(0), 'CHAR(0) IS CONSIDERED NULL')
结果:
此外,当我从数据库中将此值读入 VBScript 中的变量时,我也无法连接到该变量。
我不是 C 开发人员,但我知道 C 风格的字符串以空字符结尾。这有关系吗?有人可以帮我理解为什么 SQL 服务器和 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
SQL 服务器连接以 nul 字符结尾的字符串就好了。看这个例子:
SELECT len('"Hello World' + CHAR(0) + '"')
输出:
14
SELECT len('"Hello World' + CHAR(0) + '"' + '"Hello World' + CHAR(0) + '"')
输出:
28
将字符串存储到 CTE 或先 table 时结果相同。
VB 中的处理和输出使它看起来好像没有。尝试在 VB.
中打印出 SQL 的字符串长度