AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 7303
Accepted
vaitrafra
vaitrafra
Asked: 2011-10-28 01:13:37 +0800 CST2011-10-28 01:13:37 +0800 CST 2011-10-28 01:13:37 +0800 CST

多国数据库的多个字符集和排序规则

  • 772

在与坚持一般 Latin1 排序规则的公司进行了数十年的业务交流后,我的公司面临着将信息存储在不同字符集和排序规则中的问题:希腊语。所以,是时候开始考虑重新设计我们的数据库了。

鉴于我的安装是 MS SQLServer 2008 R2,做这样的事情的最佳方法或普遍接受的指导方针是什么?多张桌子?具有不同设置的多个数据库?

我不是DBA,我只是要求有一个起点来喃喃自语。

非常感谢您的阅读以及所有愿意回复的人。

sql-server-2008-r2 collation
  • 2 2 个回答
  • 3522 Views

2 个回答

  • Voted
  1. TechieGurl
    2011-10-28T07:17:34+08:002011-10-28T07:17:34+08:00

    如果数据相同(相同的表/列)并且唯一的变化是现在有可能使用更多语言,我会说选择 UTF-8。强制将其作为所有表定义(至少是新表定义)的默认字符集,并在您的配置中将其设置为用于未指定字符集的客户端连接。

    您尚未指定您使用的数据库类型(MySQL、SQL Server 等),所以我试图尽可能通用:)

    • 2
  2. Best Answer
    Rafael Emshoff
    2013-11-08T05:35:33+08:002013-11-08T05:35:33+08:00

    引用此MS 技术页面:

    如果您的 SQL Server 实例的用户使用多种语言,您应该选择最能支持各种语言要求的排序规则。例如,如果用户通常说西欧语言,请选择 Latin1_General 排序规则。当您支持说多种语言的用户时,最重要的是对所有字符数据使用 Unicode 数据类型 nchar、nvarchar 和 ntext。Unicode 旨在消除非 Unicode char、varchar 和 text 数据类型的代码页转换困难。当您使用 Unicode 数据类型实现所有列时,排序规则仍然会产生影响,因为它定义了比较的排序顺序和 Unicode 字符的排序。即使您使用 Unicode 数据类型存储字符数据,您也应该选择一个在使用非 Unicode 数据类型实现列或变量的情况下支持大多数用户的排序规则。

    因此,就像@Gonsalu 在对@TechiGurl 的评论中所说的那样:为 Unicode 构建数据库以支持多种语言。

    实际上,这意味着使用nchar/nvarchar/ntext数据类型,而不是 char/varchar/text。

    选择排序规则是查询优化的问题。任何排序规则都会以明确的方式对您的文本进行排序。排序规则根据特定语言和区域设置的规范,指定如何对字符串数据进行排序和比较的规则。因此,您应该选择最能满足数据库上运行的大多数查询的语言要求的排序规则。

    在 OP 给出的情况下,如果希腊文本现在占所有数据的 10%,那么我将继续使用Latin1排序规则。如果有更多的希腊语数据或在数据库上运行的大多数查询都检索希腊语数据,那么我会使用Greek_Collat​​ion。

    这是默认 MS 排序规则的列表。

    • 1

相关问题

  • SQL Server 2008 R2 群集的无人参与安装失败并出现错误 - “路径中有非法字符”。

  • 迁移大型数据库

  • 代理执行的维护计划

  • 如何从 SQL_Latin1_General_CP1_CI_AS 中提取一个 lessequal 字符?

  • 随机化表内容并将它们存储回表中

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    您如何显示在 Oracle 数据库上执行的 SQL?

    • 2 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    我可以查看在 SQL Server 数据库上运行的历史查询吗?

    • 6 个回答
  • Marko Smith

    如何在 PostgreSQL 中使用 currval() 来获取最后插入的 id?

    • 10 个回答
  • Marko Smith

    如何在 Mac OS X 上运行 psql?

    • 11 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Marko Smith

    将数组参数传递给存储过程

    • 12 个回答
  • Martin Hope
    Manuel Leduc PostgreSQL 多列唯一约束和 NULL 值 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler 什么时候应该将主键声明为非聚集的? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - 哪个更好作为主键? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick 如何优化大型数据库的 mysqldump? 2011-01-04 13:13:48 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve