科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道解析:SQL Server的 “混合排序规则环境”

解析:SQL Server的 “混合排序规则环境”

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

兼容性问题对使用多个排序规则存储数据的组织会有影响。大多数组织对所有的 Microsoft SQL Server 2000 数据库使用相同的排序规则,从而消除了所有的排序规则兼容性问题。

作者:赛迪网 limeinan 来源:天新网 2008年3月27日

关键字: 数据库 Mssql SQL SQL Server

  • 评论
  • 分享微博
  • 分享邮件

在该系统中,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
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章