Azure SQL 处理特殊字符
Posted
技术标签:
【中文标题】Azure SQL 处理特殊字符【英文标题】:Azure SQL handling special characters 【发布时间】:2021-12-26 11:39:48 【问题描述】:我正在使用带有休眠(作为 ORM)和 Java 作为编程语言的 Azure SQL(作为数据库),我们有一个地址列,将地址存储为 JSON,我们在存储转换为“的特殊字符时遇到问题” ???"(问号)
示例:“Ω”被存储为“?”
那张桌子:
CREATE TABLE test.[order](.....
.......
[shipping_address] [nvarchar](max) NOT NULL
.......
.......
)
提前致谢。
这是我们可以使用列类型 (Nvarchar) 和休眠中的数据类型作为字符串来解决的第一个问题。它适用于本地的 SQL-Server,但在 azure-sql 的 UAT 中,它不起作用。两者都有相同的排序规则:SQL_Latin1_General_CP1_CI_AS
【问题讨论】:
Mojibake - 另存为 utf8? 听起来您正在尝试将其存储在不支持所需排序规则的varchar
列类型中。请Edit您的问题包括表模式,包括列排序规则 - 作为文本。如果列未指定特定排序规则,请同时包含数据库的默认排序规则。
如何将值传递给 SQL?你在使用参数吗?如果是这样,您是否将它们传递为nvarchar
?
【参考方案1】:
SQL 需要 NVarchar 来存储特殊字符。
您已经使用 NVarchar 数据类型创建了列,这非常好。
在为插入语句传递参数时,将列数据类型编辑为 NVarchar。
如果手动插入,必须在字符前使用N
【讨论】:
是的,你说得对,我认为你说的也很有效。问题的下一部分是我正在使用 Hibernate 并将地址设置为 UDT(计算如何更改它)。你用过 Hibernate 作为 ORM 层吗? 正如您已经明确提到的,它与已发布的问题无关,您能否提出一个新的请求,以便其他社区成员也能更快地解决它。 @soubhagyasenapati - 如果我的回答对您有帮助,您可以接受它作为答案(单击答案旁边的复选标记,将其从灰色切换为已填充。)。这对其他社区成员可能是有益的。谢谢 通过从 User-Defined-Type 转移到 String 数据类型,我们能够在 SQL-Server 中存储和检索特殊字符。但在实际生产中,我们使用 Azure-SQL,这是行不通的。两者都有排序规则 "SQL_Latin1_General_CP1_CI_AS" 。任何帮助将不胜感激! 请参考azure.microsoft.com/en-in/blog/…以上是关于Azure SQL 处理特殊字符的主要内容,如果未能解决你的问题,请参考以下文章