使用 XmlData 导入内容时出现 Unicode 问题

问题描述 投票:0回答:1

我有一个存储过程,它接收像这样的 utf-8 XML

<?xml version="1.0" ?><Root><MyTable Description="さようなら" /></Root>
并在 SQL Server 上使用
XmlData
插入一些行。存储过程的相关部分是

DECLARE @xmlInput XML = NULL;
...
INSERT MyTable(Description) SELECT Description
FROM (SELECT node.value('@Description', 'NVARCHAR(200)') AS Description
FROM @xmlInput.nodes('/Root/MyTable') xmlInput(node)) XmlData;

它可以很好地处理普通文本,但它会用问号替换所有 unicode。我在其他地方读到 SQL Server 需要 utf-16 文件,我想知道是否有一些 db 函数可以将描述内容从 utf-8 转换为 utf-16 文件。

更新: 下面是调用存储过程的java代码:

Connection cn = getConnection();
CallableStatement statement = null;
try {
    statement = cn.prepareCall("sp_PutXmlTemplate(?)");
    statement.setString(1, xml);
    rs = statement.executeQuery();
...
sql-server xml t-sql unicode
1个回答
0
投票

这是一个 SQL Server 端的概念示例。

您可以在SSMS中进行测试。如果它对您有用,则问题出在 Java 方面。

SQL

-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, Description NVARCHAR(200));
-- DDL and sample data population, end

DECLARE @xmlInput XML = 
N'<?xml version="1.0"?>
<Root>
    <MyTable Description="さようなら"/>
</Root>';

INSERT @tbl (Description)
SELECT c.value('@Description', 'NVARCHAR(200)') AS Description
FROM @xmlInput.nodes('/Root/MyTable') t(c);

--Test
SELECT * FROM @tbl;

输出

身份证 描述
1 さようなら
© www.soinside.com 2019 - 2024. All rights reserved.