SQL Server数据库之 “混合排序规则环境”的描述

此文章主要讲述的是SQL Server数据库之 “混合排序规则环境”,在实际操作中你是否遇到过混合排序规则环境这种情况,如果你对其实际操作或是其相关的实际应用有不解之处时,你就可以浏览我们的文章了

混合排序规则环境

兼容性问题对使用多个排序规则存储数据的组织会有影响。大多数组织对所有的 Microsoft® SQL Server数据库™ 2000 数据库使用相同的排序规则,从而消除了所有的排序规则兼容性问题。然而,有些组织存储的数据必须可由使用不同语言的用户查看,并且希望尽可能减少排序规则兼容性问题。

所有字符和 Unicode 对象(如列、变量和常量)都有排序规则。每当使用具有不同排序规则和代码页的对象时,都必须对查询进行编码以符合排序规则类型强制规则。当对使用运算符将多个具有不同排序规则的简单表达式组合在一起的复杂表达式进行编码时,所有排序规则必须可以隐性转换,或者可以使用 COLLATE 子句显式转换。

如果没有在字符或 Unicode 表达式中指定排序规则,则默认排序规则可能因连接的当前数据库设置而异。例如,如果没有在字符或 Unicode 常量上指定 COLLATE 子句,则将给该常量指派当前数据库的默认排序规则。这意味着 Transact-SQL 语句的结果在不同数据库的上下文中执行时可能有不同的排序规则。

若设置复制,则复制网络(包括发布服务器、订阅服务器和分发服务器)中包括的所有数据库都必须使用相同的代码页。

大容量复制函数 BULK INSERT 和 bcp 命令提示实用工具支持列排序规则。

尽可能减少排序规则问题

如果必须存储反映多种语言的字符数据,始终使用 Unicode nchar、nvarchar 和 ntext 数据类型(而不是 char、varchar、text 数据类型)可使排序规则兼容性问题减到最少。使用 Unicode 数据类型可消除代码页转换问题。

对减少排序规则兼容性问题的另一个建议是使站点标准化,使之区分或不区分大小写和重音字符。若始终选择对大小写和重音使用相同敏感性的排序规则,最终用户将在所有系统间体验到一致的行为。大多数 SQL Server 2000 站点选择不区分大小写但区分重音。

大小写敏感性还适用于 SQL Server数据库 的对象名;因此,若指定区分大小写的排序规则,则所有用户在查询数据库时必须指定正确的大小写。例如,若服务器区分大小写并创建一个名为 Employees 的表,则所有的查询都必须将该表引用为 Employees。未使用正确大小写的引用(如 EMPLOYEES 或 employees)将无效。

排序规则和 tempdb

每次启动 SQL Server 时都生成 tempdb 数据库,该数据库与 model 数据库的默认排序规则相同,后者通常与实例的默认排序规则相同。如果为创建的用户数据库指定的默认排序规则与 model 的排序规则不同,则该用户数据库与 tempdb 的默认排序规则也不同。所有的临时存储过程或临时表都创建并存储在 tempdb 中,这意味着临时表中的所有隐性列以及临时存储过程中的所有类型强制默认常量、变量和参数与***表和***存储过程中创建的对等对象使用不同的排序规则。

text 数据类型可能由此产生问题。例如,某个 SQL Server 2000 实例的默认排序规则是 Latin1_General_CS_AS,并且执行以下语句:

  1. CREATE DATABASE TestDB COLLATE Estonian_CS_AS USE TestDB   
  2. CREATE TABLE TestPermTab (PrimaryKey int PRIMARY KEY, TextCol text )  

在该系统中,tempdb 数据库对代码页 1252 使用 Latin1_General_CS_AS 排序规则,TestDB 和 TestPermTab.TextCol 对代码页 1257 使用 Estonian_CS_AS 排序规则。如果接下来执行:

  1. USE TestDB GO -- Create a temporary table with the same column declarations   
  2. -- as TestPermTab CREATE TABLE #TestTempTab (PrimaryKey int PRIMARY KEY, TextCol text )  
  3.  -- This statement gets an code page conversion not allowed error   
  4. -- because the temporary table is created in tempdb, which has a  
  5. -- different default collation than TestDB. INSERT INTO  
  6. #TestTempTab SELECT * FROM TestPermTab GO  

若要消除错误,可使用以下可选方法之一:

在两个 TextCol 列中使用 Unicode 数据类型 ntext 而不是 text。

指定临时表列使用用户数据库(而不是 tempdb)的默认排序规则。如果系统需要,这将使临时表得以在多个数据库中使用具有类似格式的表。

  1. CREATE TABLE #TestTempTab (PrimaryKey int PRIMARY KEY,   
  2. TextCol text COLLATE database_default )   

指定 #TestTempTab 列的正确排序规则:

  1. CREATE TABLE #TestTempTab (PrimaryKey int PRIMARY KEY, TextCol text COLLATE Estonian_CS_AS ) 

BACKUP 和 RESTORE 中的排序规则

若还原数据库,RESTORE 将使用记录在备份文件中的源数据库的排序规则。还原的数据库与备份的原始数据库使用相同的排序规则。数据库内具有不同排序规则的个别对象仍保留其原来的排序规则。即使运行还原的实例与运行 BACKUP 的实例使用不同的默认排序规则,仍能还原数据库。

若目标服务器上已存在同名数据库,还原备份的***方法是在 RESTORE 语句中指定 REPLACE。若指定 REPLACE,现有的数据库将由备份文件中的数据库内容完全替换,并且还原数据库的排序规则将与备份文件中记录的排序规则相同。

若还原日志备份,目的数据库必须与源数据库的排序规则相同。

排序规则和文本列

若创建的含有 text 列的表所使用的代码页与数据库默认排序规则的代码页不同,则仅有两种方法可指定插入列的数据值或更新现有值。可以:

指定 Unicode 常量。

从另一个具有相同代码页的列中选择值。

假设数据库和表如下:

  1. -- Create a database with a default of code page 1252. CREATE DATABASE TestDB  
  2. COLLATE Latin1_General_CS_AS -- Create a table with a different code page,   
  3. 1253. CREATE TABLE TestTab (PrimaryKey int PRIMARY KEY, TextCol text COLLATE Greek_CS_AS )  
  4. -- This INSERT statement successfully inserts a Unicode string. INSERT INTO TestTab VALUES (1, N'abc')  
  5. -- This INSERT statement successfully inserts data by selecting   
  6. -- from a similarly formatted table in another database that uses  
  7. -- uses the Greek 1253 code page as its default. INSERT  
  8. INTO TestTab SELECT * FROM GreekDatabase.dbo.TestTab  

以上的相关内容就是对SQL Server数据库的 “混合排序规则环境”的介绍,望你能有所收获。

【编辑推荐】

  1. L Server 2000重建索引的实际操作流程
  2. 改善SQL Server安全规划的6步骤
  3. SQL Server 2000文件损坏的修复方案
  4. SQL Server 2000优化SELECT 语句的方案介绍
  5. SQL Server处理空值操作中的3大问题有哪些?

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/243377.html<

(0)
管理的头像管理
上一篇2025-04-25 05:56
下一篇 2025-04-25 05:58

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注