提问人:Venkataraman R 提问时间:4/13/2022 最后编辑:Dale KVenkataraman R 更新时间:4/18/2022 访问量:676
如何在存储过程参数中不丢失 unicode 字符
How to not lose unicode characters in Stored Procedure parameter
问:
问题陈述:
我们有一个后端为 SQL Server 的旧应用程序。到目前为止,我们在传递非 unicode 值时没有遇到任何问题。现在,我们正在从用户界面中获取 unicode 字符。
unicode 字符在 UI 中如下所示传递。这些数据正在插入到表中。
目前,我们传递如下所示的 unicode 字符,并且我们正在丢失非英语字符。
EXEC dbo.ProcedureName @IN_DELIM_VALS = '삼성~AX~Aland Islands~ALLTest1~Aland Islands~~~~'
我们尝试过什么:
如果我们传递带有 N 前缀的 unicode,则非英语字符将被正确插入到表格中。
EXEC dbo.ProcedureName @IN_DELIM_VALS = N'삼성~AX~Aland Islands~ALLTest1~Aland Islands~~~~'
但是,添加 N 前缀需要更改 UI 代码。由于它是遗留应用程序,我们希望避免 UI 更改。我们想在 sql server 端进行处理。
当我读到传递没有 N 前缀的参数时,数据被隐式转换为默认代码页,韩文字符丢失了。参考
在 Unicode 字符串常量前面加上字母 N 的 信号 UCS-2 或 UTF-16 输入,具体取决于 SC 归类是否为 使用与否。如果没有 N 前缀,字符串将转换为 数据库的默认代码页可能无法识别某些 字符。从 SQL Server 2019 (15.x)SQL Server 2019 (15.x)SQL Server 2019 (15.x)SQL Server 2019 (15.x)SQL Server 2019 (15.x)SQL Server 2019 使用归类,默认代码页能够存储 UNICODE UTF-8 字符集。
我们的问:
有没有办法在分配给存储过程参数之前向存储过程参数添加 N 前缀,这样我们就不会丢失 unicode 字符。
答:
由于无法添加前缀,因此在将参数传递给 SQL Server 后,我们将进行以下应用程序代码更改。理想情况下,应用程序应传递具有正确数据类型的参数,以便它具有前缀。N
nvarchar
N
SqlCommand cmd = new SqlCommand("EXEC dbo.ProcedureName @IN_DELIM_VALS", myConnection);
cmd.Parameters.Add(new SqlParameter("@IN_DELIM_VALS", SqlDbType.NVarChar,400)).Value
= "삼성~AX~Aland Islands~ALLTest1~Aland Islands~~~~";
cmd.ExecuteNonQuery();
评论
varchar
varchar
varchar
N
VARCHAR