3

我正在准备一个新的数据库服务器,我将从现有的大型多语言数据库(主要是英语/法语/西班牙语文本,很少有来自其他语言的特殊字符,例如城市名称)迁移数据。它将主要用于我和我的同事开发的 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. 是否会有我无法在我的数据库中支持的字符,或者我需要以某种方式转换的字符?

4

2 回答 2

5

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

SQL Server 不支持 UTF-8。您应该将数据存储为 Unicode,这意味着列类型应该是NCHARand NVARCHAR。您可以选择任何您喜欢的排序规则,因为您选择的任何排序规则都是不正确的。排序规则决定了值的排序比较方式,而不是它们存储的编码方式(驱动程序将排序规则信息解释为非 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 for SQL Server Unicode Support and Endianness ,并对 SQL Server 数据使用ucs-2le编码。

于 2012-10-01T09:46:51.650 回答
0

用作SQL_Latin1_General_CP1_CS_AS英语(美国)区域设置Latin1_General_CS_AS的默认排序规则,并用作任何其他英语区域设置的默认排序规则,例如英语(英国)

于 2012-10-01T09:22:00.447 回答