新的 SQL Server 数据库采用哪种字符集?

car*_*reo 3 sql-server character-encoding sql-server-2008-r2

我正在准备一个新的数据库服务器,我将从一个大型的现有多语言数据库迁移数据(主要是英语/法语/西班牙语文本,很少有其他语言的特殊字符,例如城市名称)。它将主要与我和我的同事开发的 PHP 应用程序一起使用。

我很难理解所有的角色设置问题,我想从一开始就做出正确的选择。

据我所知,为了支持所有 Unicode 字符,我应该使用 UTF-8。

我的问题:

  1. 我应该在 MicroSoft SQL Server 2008 中设置哪些字符集/排序规则才能获得 UTF-8?Latin1_general_CS_AS 是正确的选择吗?

  2. 我应该在 HTML 页面中使用此元吗?

    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=utf-8">
  3. 数据库中是否会存在我无法支持的字符,或者我需要以某种方式进行转换?

Rem*_*anu 5

字符集和排序规则是不同的东西。

SQL Server 不支持 UTF-8。您应该将数据存储为 Unicode,这意味着列类型应该是NCHARNVARCHAR。您可以选择任何您喜欢的排序规则,因为您选择的任何排序规则都将是错误的。排序规则确定值的排序和比较方式不是它们存储的编码(驱动程序将排序规则信息解释为非 Unicode 类型的编码提示,但这是另一个主题)。当您混合使用各种语言时,不可能存在正确的排序顺序(即您的应用程序遭受臭名昭著的土耳其语I和西班牙语ch排序问题)。然而,这通常不是一个大问题,用户很少注意到它。但总体而言,拉丁语排序规则可能是最好的。

至于返回 HTTP 字符集:您应该输入用于返回页面的字符集。SQL Server 使用什么编码来存储数据是完全不相关的。许多开发人员在这里遇到问题,因为他们在 SQL Server 中使用非 Unicode 数据类型(即CHARVARCHAR),这会导致返回的 HTTP 数据中存在许多编码不兼容问题。只要您不在自己的应用程序代码中做任何愚蠢的事情(例如尝试强制编码),只需使用 Unicode 列类型就可以解决大多数问题。

顺便说一句,既然您提到大多数应用程序都是 PHP,那么对于 PHP,您可能需要将编码从 SQL Server Unicode UCS-2 转换为您所需的输出格式 (UTF-8)。请务必阅读Microsoft Drivers for PHP 以了解 SQL Server Unicode 支持和字节顺序,并对 SQL Server 数据使用ucs-2le编码。