【问题标题】:Converting non-unicode SQL Server data and stored procs to Unicode将非 unicode SQL Server 数据和存储过程转换为 Unicode
【发布时间】:2026-01-01 06:25:01
【问题描述】:

我需要将非 unicode SQL Server 2005 数据库转换为基于 unicode 的数据库。我有数百个存储过程,当然数据存储在 varchar 中。我知道我需要将所有数据类型更改为等效的 unicode(varchar 到 nvarchar),但我不必更改存储过程的编写方式,或者它们会像以前一样继续工作吗?我试图弄清楚对于具有许多存储过程的大型数据库,从非 unicode 更改为 unicode 需要什么。

【问题讨论】:

    标签: sql sql-server unicode


    【解决方案1】:

    是的,您需要更新您的数据和存储过程,但要记住的重要一点是您只需将 一些 列更改为 UNICODE。对于“内部”的任何内容,您无需支付 UNICODE 费用。

    要实现这一改变还有很多工作要做,但不要盲目地改变一切。我以前一直在接受这种变化,这很痛苦。 (使用 nvarchar(1) 存储 'y' 和 'n' 是愚蠢的。)

    【讨论】:

    • 请注意,在 SQL Server 2008 R2 中,如果您使用数据压缩,您只需为实际的 Unicode 数据支付 Unicode 成本。压缩算法非常智能——它不会在 ASCII 字符上浪费两个字节,并且通过存储偏移量而不是实际的 2 字节字符,即使在 Unicode 数据上也能实现显着压缩。将其添加到您已经通过数据压缩获得的字典和其他压缩之上。当然,您会为压缩/解压缩付出代价,因此请始终进行测试。一些博客(前三名):is.gd/4yleO
    • 令我失望的是 UNICODE 压缩仅限企业使用。这是 SQL Server 落后的东西,现在他们正在追赶一个很好的解决方案,但他们将其限制在 Enterprise(我不会使用)。