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

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

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