【问题标题】:Azure SQL handling special charactersAzure SQL 处理特殊字符
【发布时间】: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

标签: java sql sql-server hibernate azure-sql-database


【解决方案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" 。任何帮助将不胜感激!
猜你喜欢
  • 2018-09-24
  • 1970-01-01
  • 1970-01-01
  • 2014-09-13
  • 2011-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多