我有一个存储过程,它接收像这样的 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 端的概念示例。
您可以在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 | さようなら |