【问题标题】:What collation to use for SQL Server database?SQL Server 数据库使用什么排序规则?
【发布时间】:2011-10-15 20:04:08
【问题描述】:

我需要选择哪种排序规则? SQL Server 2008

我在 stackoverflow.com 上找到了一篇关于这个问题的不错的相关帖子: How to choose collation of SQL Server database

所以如果我理解得很好(参考上面的链接):

  • collat​​ion 用于排序和比较):
  • NVARCHAR 用于存储数据。

归类属性/参数

  • CI 指定不区分大小写
  • CS 指定区分大小写
  • AI 指定不区分重音
  • AS 指定区分重音

我需要创建一个数据库来存储土耳其语和英语,我会选择 CI 和 AI。我不想要区分大小写和不区分重音,所以这很容易。我认为这对英语来说很清楚,但土耳其语有一些特殊字符,如 üçö 等。

问题:

由于排序规则与存储数据无关,我将使用NVARCHAR,为什么我应该选择排序规则Turkish_100_CI_AI,我也可以使用Latin1_General_100_CI_AI,这也是我的默认设置我的 SQL 服务器。两者都是拉丁文字。

在同一个数据库中存储 ENGLISH 和 FRENCH 是同一个问题...为什么要使用 French_100_CI_AI 而不是 Latin1_General_100_CI_AI?

有人可以建议吗?我错了吗?

【问题讨论】:

  • 你错了,Latin1 字符集包含了这些语言的所有字符。它没有。 Latin1 排序规则对字符相等性和排序做出与特定语言排序规则相同的决定。
  • @Dan:请您澄清一下。好的,我只是一个拉丁字符集的网站。一些土耳其字符不存在......但它适用于法语......所以如果那里有所有法语字符,我可以使用法语 - 英语......不是吗? "msdn.microsoft.com/en-us/library/ms537495(v=vs.85).aspx"... -2- 为什么Latin 1 collat​​ion 不做决定?
  • 如果它不明显(它没有在您的问题中突出显示,也没有链接到),排序和比较会影响UNIQUE 约束的定义 - 所以如果您决定整理CI_AI,您不能将两个值存储在仅因大小写(或重音)而异的唯一列中
  • 抱歉,不清楚。你的意思是:在“名称”或“地址”栏中 - 当它是 Latin1_100_CI_AI 时,我可以在这里存储法语/英语吗?法语字符在 Latin1 中。我可以接受这个说法。如果字符在 Latin1 集中(对于任何语言)..我可以使用 Latin1。 -> 这是正确的吗?

标签: sql-server sql-server-2005


【解决方案1】:

如果您的数据模型允许您将数据分成特定语言的列,您可以使用 COLLATE 子句为每列显式设置排序规则。

您还可以将 COLLATE 子句应用于 SELECT 语句(例如,您将所有语言数据保存在同一位置,并且仅在 SELECT 中按语言过滤)。

据我所知,Latin1 不包括土耳其语(排序顺序)。

【讨论】:

【解决方案2】:

排序规则是指一组确定数据如何排序和比较的规则。使用定义正确字符序列的规则对字符数据进行排序,并提供用于指定区分大小写、重音符号、假名字符类型和字符宽度的选项。

区分大小写

如果A和a、B和b等被同等对待,那么不区分大小写。计算机对 A 和 a 的处理方式不同,因为它使用 ASCII 码 来区分输入。

口音敏感度

如果a和á、o和ó处理方式相同,则为重音-不敏感。计算机以不同的方式处理 a 和 á,因为它使用 ASCII 代码来区分输入。比如 a 的 ASCII 值是 97 而 á 是 225。

假名敏感度

当日本假名字符平假名和片假名被区别对待时,它被称为假名敏感。

宽度敏感度

当单字节字符(半角)和表示为双字节字符(全角)的相同字符被区别对待时,它是宽度敏感的。

更多信息可以在here找到。我希望这个答案有所帮助。

【讨论】:

    猜你喜欢
    • 2011-04-08
    • 2014-02-22
    • 2012-06-08
    • 2014-11-25
    • 2012-09-12
    • 1970-01-01
    • 2011-11-14
    • 2011-05-31
    • 2019-03-07
    相关资源
    最近更新 更多