首页 > 解决方案 > MS SQL 中 nvarchar(max) 和 nvarchar(4000) 之间的 unicode 结果不同

问题描述

当我将列的类型从 NVARCHAR(MAX) 更改为 NVARCHAR(4000) 时,我在我的 MS-SQL (14.0) 数据库中发现了一个关于 unicode 处理的奇怪行为,我不知道是什么原因造成的。

表(数据库排序规则:Latin1_General_100_CI_AS):

CREATE TABLE [dbo].[Test]([Text] [nvarchar](MAX) NULL)

首先,我使用 SQL Management Studio 的“Edit Top 200 Rows”手动粘贴到“Text”“f�V”(f\ue48a\udc0bV)中(不要问为什么......)。

从测试中选择 *

然后我改变了列的类型:

ALTER TABLE Test
ALTER COLUMN Test nvarchar(4000)

从测试中选择 *

如您所见,第二个 unicode 字符的显示方式不同。将类型更改回 nvarchar(max) 等时,可以反转此行为。

实际问题是,当我通过 EntityFramework 在 C# 应用程序中加载该条目时,如果 nvarchar(max),生成的字符串读取“f\ue48a\udc0bfV”,但如果 nvarchar(4000),则结果字符串读取“f�V”,前者导致写入流时出现异常。

有谁知道实际的区别是什么以及为什么它甚至在那里?

提前致谢!

编辑: 这并不能解决我的问题,但 unicode 处理的差异可能来自存储在 LOB 中的 NVARCHAR(MAX) 值,而不是 NVARCHAR(4000) 的行内存储。

Edit2: 只是补充说我已经按照建议提交了这个问题

标签: c#sql-server

解决方案


推荐阅读