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 / 问题 / 7346
Accepted
mKorbel
mKorbel
Asked: 2011-10-28 23:27:37 +0800 CST2011-10-28 23:27:37 +0800 CST 2011-10-28 23:27:37 +0800 CST

SQL Server 2005/2008 UTF-8 排序规则/字符集

  • 772

UTF-8我在 SQL Server 2005/2008中找不到直接设置相关的选项Collations/Charsets,这与在其他 SQL 引擎中设置的可能相同,但在 SQL Server 2005/2008 中只有拉丁语和 SQL 排序规则。

是否有一些选项可以在 Win2008 操作系统上的 SQL Server 引擎(两个版本)2005/2008 中强制/安装这些排序规则/字符集

sql-server sql-server-2008
  • 4 4 个回答
  • 84141 Views

4 个回答

  • Voted
  1. Best Answer
    gbn
    2011-10-29T00:11:05+08:002011-10-29T00:11:05+08:00

    不,没有。SQL Server 不支持 UTF-8。

    如果需要 unicode 数据,则需要将列定义为 nvarchar/nchar。注意,内部 SQL Server 将其存储为 UCS-2。

    请注意,这已在 Connect 上向 MS提出请求,并且有一篇较旧的知识库文章。还有这个博客上的一些信息

    • 14
  2. Solomon Rutzky
    2019-03-15T10:53:39+08:002019-03-15T10:53:39+08:00

    从 SQL Server 2019(目前处于测试版/“社区技术预览版”)开始,通过一系列新的 UTF-8 排序规则提供对 UTF-8 的原生支持。但是,能够使用 UTF-8 并不意味着您应该这样做。使用 UTF-8 有明显的缺点,例如:

    1. 只有前 128 个代码点是 1 个字节(即标准的 7 位 ASCII 集)
    2. 接下来的近 2000 个代码点是 2 个字节,因此与 UTF-16 相比没有节省空间/NVARCHAR
    3. BMP 中剩余的 63k 个代码点(即 U+0800 - U+FFFF 范围)都是 3 个字节,因此比 UTF-16 / 中的相同字符大NVARCHAR1 个字节。
    4. 只是说一下:补充字符在两种编码中都是 4 个字节,所以没有空间差异
    5. 虽然使用 UTF-8 可以节省空间,但这样做很有可能会影响性能。

    它真正归结为:UTF-8 是一种存储格式设计,可让 8 位系统(通常围绕 ASCII 和 ASCII 扩展 - 代码页设计)使用 Unicode 而不会破坏任何东西或需要对现有系统进行任何修改文件以保持运行。UTF-8 非常适合文件系统和网络,但存储在SQL Server 中的数据两者都不是。恰好大部分(或完全)在标准 ASCII 范围内的数据在存储为 UTF-16 / 时需要比相同数据更少的空间这一事实NVARCHAR是一个副作用。当然,这是一个可以证明是有用的副作用,但这个决定需要由既了解数据又了解该决定的后果/缺点的人做出。这是不是一般用途的功能。

    此外,UTF-8(在 SQL Server 中)的主要用例是已经使用 UTF-8 的应用程序代码,可能已经使用另一个支持它的 RDBMS,并且不希望或没有能力更新应用程序代码/数据库架构使用NVARCHAR数据类型(用于表、变量、参数等),或在字符串文字前加上大写“N”。目标与 UTF-8 存在的原因相同:使应用程序代码能够使用 Unicode,而不改变整体结构或呈现现有数据无效。如果这描述了您的情况,请使用 UTF-8,但请注意它仍然存在一些错误/问题。

    如果您在不使用NVARCHAR或大写“N”前缀字符串文字的情况下没有明确需要 Unicode 工作,那么 UTF-8 的唯一另一个好处是,如果您有很多需要允许的大部分标准 ASCII 数据Unicode 字符,并且您正在使用NVARCHAR(MAX)(这意味着数据压缩不起作用),并且表会频繁更新(因此聚集列存储索引可能不会真正提供帮助)。

    详细内容请看我的帖子:

    SQL Server 2019 中的原生 UTF-8 支持:救世主还是假先知?

    • 3
  3. Guffa
    2015-08-21T13:30:24+08:002015-08-21T13:30:24+08:00

    您不能将 UTF-8 安装为字符集,因为它不是字符集,而是一种编码。

    如果要存储 Unicode 文本,请使用nvarchar数据类型。

    如果要存储使用 UTF-8 编码的文本,请将其存储为二进制数据 ( varbinary)。

    • 2
  4. Halim
    2016-01-07T05:30:09+08:002016-01-07T05:30:09+08:00

    我的情况是,我必须显示阿拉伯字符,而我的开发数据库是在 2014 年,这里一切正常。在这里,在查询中我可以看到阿拉伯语字符,我的排序规则是 SQL_Latin1_General_CP1256_CI_AS

    但我的作品是在 SQL Server 2008 中制作的,最终它不支持 UTF-8 字符集。在这里,我可以看到所有????????????? 因为 SQL 2008 不支持 UTF-8。

    我所做的就是将所有 varchar 更改为 nvarchar,我可以正确地看到阿拉伯语字符。此外,我将 2008 年的数据库排序规则更改为 SQL_Latin1_General_CP1256_CI_AS

    • 0

相关问题

  • 死锁的主要原因是什么,可以预防吗?

  • 我在索引上放了多少“填充”?

  • 是否有开发人员遵循数据库更改的“最佳实践”类型流程?

  • 如何确定是否需要或需要索引

  • 从 SQL Server 2008 降级到 2005

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