SQL 字符串开头为空?

Jos*_*oss 0 sql-server ssms

我试图比较两个表,但我不断得到看起来为空的值,但实际上不是。

 SET @secret_message = CHAR(0) + 'Hello World!';
 SELECT @secret_message, RIGHT(@secret_message,12)
Run Code Online (Sandbox Code Playgroud)

据我所知,如果值以 NULL 开头,SSMS 将停止读取这些值。

这是错误还是功能?

Joe*_*orn 6

字节就在那里;这是显示结果的代码,但没有显示结果。

\n

当SQL Server存储字符串数据时,无论内容如何,​​它都知道有多少个字符。类似地,较新的编程环境倾向于通过将长度包含为自己的字段(通常第一个字段作为固定长度 int)来对字符串进行编码

\n

然而,较旧的字符串处理库 \xe2\x80\x94 尤其是来自 C/C++ 的字符串处理库,它们反过来支撑了我们的许多核心操作系统和 GUI 桌面平台 \xe2\x80\x94 而不是使用 -\\0终止的字符串。这些库将遍历数据,直到找到字符\\0,然后停止。

\n

所以我们这里得到的是 SQL Server 返回的数据,如下所示:

\n
 \\0Hello World!\n
Run Code Online (Sandbox Code Playgroud)\n

这又(正确地!)以老式字符串呈现,如下所示:

\n
\\0Hello World!\\0\n
Run Code Online (Sandbox Code Playgroud)\n

因此,当我们实际去显示它时,最终看起来像这样:

\n
\n