新聞中心
此文章主要講述的是SQL Server數據庫之 “混合排序規(guī)則環(huán)境”,在實際操作中你是否遇到過混合排序規(guī)則環(huán)境這種情況,如果你對其實際操作或是其相關的實際應用有不解之處時,你就可以瀏覽我們的文章了

寧津網站建設公司成都創(chuàng)新互聯(lián),寧津網站設計制作,有大型網站制作公司豐富經驗。已為寧津近千家提供企業(yè)網站建設服務。企業(yè)網站搭建\成都外貿網站建設公司要多少錢,請找那個售后服務好的寧津做網站的公司定做!
混合排序規(guī)則環(huán)境
兼容性問題對使用多個排序規(guī)則存儲數據的組織會有影響。大多數組織對所有的 Microsoft? SQL Server數據庫? 2000 數據庫使用相同的排序規(guī)則,從而消除了所有的排序規(guī)則兼容性問題。然而,有些組織存儲的數據必須可由使用不同語言的用戶查看,并且希望盡可能減少排序規(guī)則兼容性問題。
所有字符和 Unicode 對象(如列、變量和常量)都有排序規(guī)則。每當使用具有不同排序規(guī)則和代碼頁的對象時,都必須對查詢進行編碼以符合排序規(guī)則類型強制規(guī)則。當對使用運算符將多個具有不同排序規(guī)則的簡單表達式組合在一起的復雜表達式進行編碼時,所有排序規(guī)則必須可以隱性轉換,或者可以使用 COLLATE 子句顯式轉換。
如果沒有在字符或 Unicode 表達式中指定排序規(guī)則,則默認排序規(guī)則可能因連接的當前數據庫設置而異。例如,如果沒有在字符或 Unicode 常量上指定 COLLATE 子句,則將給該常量指派當前數據庫的默認排序規(guī)則。這意味著 Transact-SQL 語句的結果在不同數據庫的上下文中執(zhí)行時可能有不同的排序規(guī)則。
若設置復制,則復制網絡(包括發(fā)布服務器、訂閱服務器和分發(fā)服務器)中包括的所有數據庫都必須使用相同的代碼頁。
大容量復制函數 BULK INSERT 和 bcp 命令提示實用工具支持列排序規(guī)則。
盡可能減少排序規(guī)則問題
如果必須存儲反映多種語言的字符數據,始終使用 Unicode nchar、nvarchar 和 ntext 數據類型(而不是 char、varchar、text 數據類型)可使排序規(guī)則兼容性問題減到最少。使用 Unicode 數據類型可消除代碼頁轉換問題。
對減少排序規(guī)則兼容性問題的另一個建議是使站點標準化,使之區(qū)分或不區(qū)分大小寫和重音字符。若始終選擇對大小寫和重音使用相同敏感性的排序規(guī)則,最終用戶將在所有系統(tǒng)間體驗到一致的行為。大多數 SQL Server 2000 站點選擇不區(qū)分大小寫但區(qū)分重音。
大小寫敏感性還適用于 SQL Server數據庫 的對象名;因此,若指定區(qū)分大小寫的排序規(guī)則,則所有用戶在查詢數據庫時必須指定正確的大小寫。例如,若服務器區(qū)分大小寫并創(chuàng)建一個名為 Employees 的表,則所有的查詢都必須將該表引用為 Employees。未使用正確大小寫的引用(如 EMPLOYEES 或 employees)將無效。
排序規(guī)則和 tempdb
每次啟動 SQL Server 時都生成 tempdb 數據庫,該數據庫與 model 數據庫的默認排序規(guī)則相同,后者通常與實例的默認排序規(guī)則相同。如果為創(chuàng)建的用戶數據庫指定的默認排序規(guī)則與 model 的排序規(guī)則不同,則該用戶數據庫與 tempdb 的默認排序規(guī)則也不同。所有的臨時存儲過程或臨時表都創(chuàng)建并存儲在 tempdb 中,這意味著臨時表中的所有隱性列以及臨時存儲過程中的所有類型強制默認常量、變量和參數與***表和***存儲過程中創(chuàng)建的對等對象使用不同的排序規(guī)則。
text 數據類型可能由此產生問題。例如,某個 SQL Server 2000 實例的默認排序規(guī)則是 Latin1_General_CS_AS,并且執(zhí)行以下語句:
- CREATE DATABASE TestDB COLLATE Estonian_CS_AS USE TestDB
- CREATE TABLE TestPermTab (PrimaryKey int PRIMARY KEY, TextCol text )
在該系統(tǒng)中,tempdb 數據庫對代碼頁 1252 使用 Latin1_General_CS_AS 排序規(guī)則,TestDB 和 TestPermTab.TextCol 對代碼頁 1257 使用 Estonian_CS_AS 排序規(guī)則。如果接下來執(zhí)行:
- 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)的默認排序規(guī)則。如果系統(tǒng)需要,這將使臨時表得以在多個數據庫中使用具有類似格式的表。
- CREATE TABLE #TestTempTab (PrimaryKey int PRIMARY KEY,
- TextCol text COLLATE database_default )
指定 #TestTempTab 列的正確排序規(guī)則:
- CREATE TABLE #TestTempTab (PrimaryKey int PRIMARY KEY, TextCol text COLLATE Estonian_CS_AS )
BACKUP 和 RESTORE 中的排序規(guī)則
若還原數據庫,RESTORE 將使用記錄在備份文件中的源數據庫的排序規(guī)則。還原的數據庫與備份的原始數據庫使用相同的排序規(guī)則。數據庫內具有不同排序規(guī)則的個別對象仍保留其原來的排序規(guī)則。即使運行還原的實例與運行 BACKUP 的實例使用不同的默認排序規(guī)則,仍能還原數據庫。
若目標服務器上已存在同名數據庫,還原備份的***方法是在 RESTORE 語句中指定 REPLACE。若指定 REPLACE,現有的數據庫將由備份文件中的數據庫內容完全替換,并且還原數據庫的排序規(guī)則將與備份文件中記錄的排序規(guī)則相同。
若還原日志備份,目的數據庫必須與源數據庫的排序規(guī)則相同。
排序規(guī)則和文本列
若創(chuàng)建的含有 text 列的表所使用的代碼頁與數據庫默認排序規(guī)則的代碼頁不同,則僅有兩種方法可指定插入列的數據值或更新現有值??梢裕?/p>
指定 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數據庫的 “混合排序規(guī)則環(huán)境”的介紹,望你能有所收獲。
分享標題:SQLServer數據庫之“混合排序規(guī)則環(huán)境”的描述
當前URL:http://m.5511xx.com/article/ccosgjs.html


咨詢
建站咨詢
