哪个charset用于新的SQL Server数据库?

时间:2012-10-01 09:13:54

标签: 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. 我的数据库中是否存在无法支持的字符,或者我需要以某种方式进行转换?

2 个答案:

答案 0 :(得分:4)

字符集和整理是不同的事情。

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

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

顺便说一下,既然你提到大多数应用程序都是PHP,那么你很可能需要将SQL Server Unicode UCS-2的编码转换为你想要的输出格式(UTF-8)。请务必阅读Microsoft Drivers for PHP for SQL Server Unicode Support and Endianness并使用 ucs-2le 编码来获取SQL Server数据。

答案 1 :(得分:0)

使用SQL_Latin1_General_CP1_CS_AS作为英语(美国)语言环境的默认排序规则,使用Latin1_General_CS_AS作为任何其他英语语言环境的默认排序规则,例如英语(英国)