我们正在将我们的应用程序升级到完全兼容 Unicode,因为我们最近获得了 Delphi 2009,它提供了开箱即用的功能。我正在寻找具有升级应用程序以接受 Unicode 字符经验的任何人。具体回答以下任何问题。

  • 我们需要将 VarChars 更改为 NVarchar,将 Char 更改为 NChar。这里有什么问题吗?
  • 我们需要更新所有 sql 语句以在任何 sql 字符串前面包含 N。因此 Update tbl_Customer set Name = 'Smith' 必须变为 Update tbl_Customer set Name = “史密斯”。有什么方法可以为某些字段默认此设置。这似乎很不寻常,但这仍然是必需的。
  • 是否有可能在 SQLServer 中设置任何默认值以使这变得更简单?

ps 我们还需要升级我们的Oracle代码

有帮助吗?

解决方案

Oracle 不要求您使用 nvarchar 存储 Unicode 字符串——服务器可以配置为存储 varchar2 以 UTF-8 格式。如果你之前只支持 ASCII,那么它应该是透明的。这应该可以避免所有应用程序端搜索和替换的需要 'N'.

至于达米安的观点:它现在可能对您没有帮助,但您确实应该优先考虑摆脱非参数化查询。从维护、性能和安全的角度来看,它们只不过是系统的拖累。

其他提示

对于 SQL Server 来说,显而易见的是,nchar/nvarchar 的限制是其 char/varchar 对应项的一半(除非您将所有 > 4000 的内容迁移到 nvarchar(max))

达米恩

我不确定你的答案有多大用处。我们有 700,000 行编译代码库,这些代码库是在过去十年中编写的,其中包含大量 sql 查询。大多数都被标准化为几个功能,这是数据库上大多数更新的基础。这些可以很简单地更新。但是,我们还需要检查 CustomerName = '%s' 的每个 where 子句,现在应该是 CustomerName = N'%s'

这是一个真正的问题,需要一个真正的答案。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top