当前位置:首页 > 系统运维 > 正文内容

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

a8116255316年前 (2010-07-05)系统运维7

此文章主要讲述的是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,并且执行以下语句:

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

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

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

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

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

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

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

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

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

BACKUP 和 RESTORE 中的排序规则

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

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

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

排序规则和文本列

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

指定 Unicode 常量。

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

假设数据库和表如下:

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

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

扫描二维码推送至手机访问。

版权声明:本文由2345好导航站长资讯发布,如需转载请注明出处。

本文链接:http://2345hao.cn/blog/index.php/post/21507.html

分享给朋友:

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

上帝不止一个 更多Windows7 快捷模式.

上帝不止一个 更多Windows7 快捷模式.

国外媒体CNET NEWS就这个“上帝模式”和微软Windows部门主管Steven Sinofsky进行邮件交流后得知,这其实只是众多快捷方式中的一个,Sinofsky在邮件里给出了十多个这类快捷方式的关键字符串。 它们的建立方法和之前的“上帝模式”一样,在任意位置新建的一个文件夹,然后改名即可...

Skylake平台不能通过USB接口装windows 7系统

Skylake平台不能通过USB接口装windows 7系统

Intel会在2015年推出Broadwell、Skylake两代14nm处理器,前者可以使用9系芯片组,Skylake升级到了LGA1151插槽,需要搭配新的100系列芯片组,但初期的Skylake-S又不能超倍频,所以今年Q2季度开始会很混杂。Skylake一代会支持DDR4,100系列芯片组升...

Win 7系统中其他声音正常但酷狗音乐没声音怎么回事

Win 7系统中其他声音正常但酷狗音乐没声音怎么回事

故障现象: Windows 7酷狗软件无声音,系统声音正常。 原因分析: 1. 查看酷狗软件设置 2. 查看系统设置 解决方案: 1. Windows 7操作方法 如图:查看是否处于禁音状态   Windows 7系统声音正常酷狗音乐无声音 2. 查看设置音频输出是否...

微软为windows 7用户重新发布补丁KB2952664 帮助提升Win10升级体

微软为windows 7用户重新发布补丁KB2952664 帮助提升Win10升级体

1月13日消息,微软今天为Windows 7(SP1)用户重新推送了编号为KB2952664的更新补丁,该更新在官方KB知识库中的描述为“Windows 7系统升级兼容性更新”,用于帮助微软改进当前版本系统,提升升级到最新版Win10系统的体验。 这项更新还用于在系统中显示Windows10更新提...

windows 7/8/xp系统关闭自动播放功能禁止音频媒体自动播放

windows 7/8/xp系统关闭自动播放功能禁止音频媒体自动播放

Windows 7/8系统: 控制面板——自动播放——取消掉为所有媒体和设备设置自动播放 winXP系统: 开始—运行—gpedit.msc—计算机配置—管理模板—系统—关闭自动播放—已启用—所有驱动器—确定  关闭自动运行功能说明: 一旦您将媒体插入驱动器...

windows 7为什么老掉线 windows 7使用迅雷或快车下载的时候老掉

windows 7为什么老掉线 windows 7使用迅雷或快车下载的时候老掉

经过几天的测试后发现,Windows 7用户反映的情况确实存在,但并没有达到“频繁”的情况。同时,也并非是迅雷或快车抢了带宽。(即便是抢了带宽,表现的形式也是页面打开慢,而非是掉线),寻找问题的原因过程中,我们认为是Windows 7系统对于网卡的电源管理的默认设置造成的。 下面,就以Window...