我正在准备一个新的数据库服务器,我将从一个大的,现有的多语言数据库(主要是英语/法语/西班牙语文本,很少来自其他语言的特殊字符,例如城市名称)迁移数据。它主要用于我和我的同事开发的PHP应用程序。
我很难理解所有角色集问题,我想从一开始就做出正确的选择。
根据我的阅读,为了支持所有Unicode字符,我应该使用UTF-8。
我的问题:
我应该在MicroSoft SQL Server 2008中设置/归类哪些字符来获取UTF-8? Latin1_general_CS_AS是正确的选择吗?
我应该在HTML页面中使用此元素吗?
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=utf-8">
我的数据库中是否存在无法支持的字符,或者我需要以某种方式进行转换?
答案 0 :(得分:4)
字符集和整理是不同的事情。
SQL Server不支持UTF-8。您应该将数据存储为Unicode,这意味着列类型应为NCHAR
和NVARCHAR
。您可以选择任何您喜欢的排序规则,因为您选择的任何排序规则都会不正确。排序规则确定值排序和比较的方式,而不是它们存储的编码方式(驱动程序将排序规则信息解释为非Unicode类型的编码提示,但这是一个不同的主题)。当您混合使用各种语言时,没有可能的正确排序顺序(即您的应用程序将遭受臭名昭着的土耳其语I
和西班牙语ch
排序问题)。但是,这通常不是一个大问题,用户很少注意到它。总的来说,拉丁语整理可能是最好的。
至于你的返回HTTP字符集:你应该把你用来返回页面的字符集作为。 SQL Server用于存储数据的编码完全不相关。许多开发人员在这里遇到问题,因为他们在SQL Server中使用非Unicode数据类型(即CHAR
和VARCHAR
),这导致返回的HTTP数据中存在许多编码不兼容性。只要您在自己的应用程序代码中没有做任何愚蠢的事情(比如试图强制编码),只需使用Unicode列类型就可以解决大多数问题。
答案 1 :(得分:0)
使用SQL_Latin1_General_CP1_CS_AS
作为英语(美国)语言环境的默认排序规则,使用Latin1_General_CS_AS
作为任何其他英语语言环境的默认排序规则,例如英语(英国)