31

您好我正在尝试将一些 XML 数据插入到 SQL Server 2008 上的表中。但是我不断收到此错误;

XML解析:第1行,字符39,无法切换编码

数据库列 filemeta 使用 XML 数据类型,我已将编码切换为 UTF-16,我认为这是添加 XML 数据所必需的。

INSERT INTO testfiles
  (filename, filemeta) 
VALUES 
  ('test.mp3', '<?xml version="1.0" encoding="utf-16" standalone="yes"?><!--This is a test XML file--><filemeta filetype="Audio"><Comments /><AlbumTitle /><TrackNumber /><ArtistName /><Year /><Genre /><TrackTitle /></filemeta>');

救命,我卡住了。

注意:我使用 XMLTextWriter 创建了 XML。

4

3 回答 3

36

是的,当您尝试将 XML 插入 SQL Server 2008 并且 XML 包含编码指令行时会出现问题。

我通常使用CONVERT允许我指示 SQL Server 跳过这些指令的函数来解决问题 - 使用类似这样的东西:

INSERT INTO testfiles
  (filename, filemeta) 
VALUES 
  ('test.mp3', CONVERT(XML, N'<?xml version="1.0" encoding="utf-16" standalone="yes"?>......', 2));

它确实帮助我将各种编码的 XML 内容导入 SQL Server。

请参阅有关 CAST 和 CONVERT 的 MSDN 文档- 在页面下方,您可以使用多种样式CONVERT以及XML一些关于它们的解释。

于 2010-09-02T16:01:04.087 回答
20

您只需在 XML 字符串前面包含N即可使其成为 unicode。

INSERT INTO testfiles
  (filename, filemeta) 
VALUES 
  ('test.mp3', N'<?xml version="1.0" encoding="utf-16" standalone="yes"?><!--This is a test XML file--><filemeta filetype="Audio"><Comments /><AlbumTitle /><TrackNumber /><ArtistName /><Year /><Genre /><TrackTitle /></filemeta>');
于 2010-09-02T16:06:02.350 回答
1

这对我有用,没有任何错误:

DECLARE @input XML 
SET @input = N'<?xml version="1.0" encoding="utf-16" standalone="yes"?><!--This is a test XML file--><filemeta filetype="Audio"><Comments /><AlbumTitle /><TrackNumber /><ArtistName /><Year /><Genre /><TrackTitle /></filemeta>'

INSERT INTO testfiles (filename, filemeta)
VALUES ('test.mp3', @input);
于 2017-04-05T07:41:44.287 回答