【发布时间】:2020-06-22 17:33:24
【问题描述】:
我想知道在插入 UTF16 XML 时是否可以在 TSQL 中不使用 N 前缀? 因为我有一个新版本的数据库,我将 NTEXT 列的类型更改为 XML。 使用 NTEXT 格式,以前的所有软件都可以在不使用 N 前缀的情况下成功插入行。 但是现在使用 XML 列的类型,当我尝试使用 utf16 插入 XML 时,我得到了转换错误。 所以我通过在新软件版本中使用 N 前缀来解决这个问题。但我希望所有以前的软件继续成功插入。
有解决办法吗?也许通过更改列排序规则(从来没有这样做过)?
感谢您的帮助
嗨, 我在这里添加示例。 旧软件示例
INSERT INTO [myTable] ([id], [xmldata]) VALUES (1, '<?xml version="1.0" encoding="UTF-16"?><viewlist version="3">....</viewlist>')
新软件示例
INSERT INTO [myTable] ([id], [xmldata]) VALUES (1, N'<?xml version="1.0" encoding="UTF-16"?><viewlist version="3">....</viewlist>')
【问题讨论】:
-
With NTEXT format, all previous software can insert row without using N Prefix successfully- 这意味着您实际上从未拥有可以从 Unicode 中受益的数据。是的,在将字符串文字插入ntext或xml列时,您绝对应该使用N。 -
ntext和text数据类型将在 SQL Server 的未来版本中删除。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。请改用nvarchar(max)或varchar(max)。 See details here -
我想到了一个触发器,可以将 unicode 添加到给定的字符串中,但我没有找到任何解决方案将字符串转换为 unicode 到触发器中:(
-
如果一个字符串已经作为非 unicode 字符串提供,在查询中添加 N 绝对不会做任何事情。角色数据已被销毁。
-
当列是 XML 类型时,问题出在新软件版本上。旧软件使用 utf16 prolog 插入 XML,不会导致 NTEXT 列出现问题
标签: sql-server xml tsql utf-16