sql - 无法连接到末尾带有 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
解决方案
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 中获取的字符串的长度。
推荐阅读
- excel - 在一组形状中查找文本框(VBA 6.3)
- reactjs - 为什么我不能在全局上下文中返回数据数组?
- python - python:使用纬度和经度查找提供位置半径内的位置的优雅方法
- python - 在学习如何使用 __init__ 语句时遇到问题
- javascript - Azure 地图控件覆盖 CSS 样式
- javascript - React Sortable Tree:默认展开每个节点
- geopandas - 如何读取特定坐标格式的匀称文件或将坐标格式打包的 DMS 与十进制更改为 DMS 格式
- python - 根据条件对多个数据框列求和
- laravel - 如何使用自定义数组从 laravel 控制器向 vuejs 发送数据
- ios - 如何将 ios swift 项目分配给特定的 App Group