2010年10月18日 星期一

SQL Server 中處理 Unicode 字串

ACCESS是用UNICODE來存儲內容的,因此往裡面存放各種UNICODE 字符都不會出問題。 而如果向MSSQL 中存放的話有可能變成???難道MSSQL不支持UNICODE ,並非如此。而如果向SQL Server 有支援Unicode字。必須符合以下兩個條件。
1. 使用支援Unicode字元的資料型別來儲存資料。
在Microsoft SQL Server 中 ,以下資料型別支援Unicode資料:在Microsoft SQL Server 中 ,以下資料型別支援Unicode資料:
nchar nchar
nvarchar nvarchar
ntext ntext
2. 您在SQL Server 中處理Unicode字串常數時,必須在所有Unicode字串之前加上大寫字母N。
請參考以下文件:請參考以下文件: 
參考資料:http://support.microsoft.com/kb/239530/zh-tw

INF:SQL Server 中的Unicode字串常數需要N 前置詞 INF:SQL Server 中的Unicode字串常數需要N前置詞
當您在SQL Server 中處理Unicode字串常數時,必須在所有Unicode字串之前加上大寫字母N。 「N」這個前置詞代表的是SQL-92 標準中的「國際語言」(National Language),並且必須為大寫。 如果您沒有在Unicode字串常數前面加上N 作為前置詞,則SQL Server 會在使用字串之前將它轉換成SQL Server 所安裝的字碼頁。同時您不能使用無法傳遞Unicode的程式來Insert Unicode字串 . 另外您的Server也必須有該相關的codepage, 否則無法顯示字串 。

About MDF與LDF的blocks

有人跟我講SQL SERVER 放MDF File的磁碟格式化時最好用64K下去分割~~~
LDF File的磁碟格式化用預設4K就可以~~
那為什麼會這樣子呢??我有去幾個論壇及GOOGLE大神上找一下答案!!
答案應該如下:

SQL Server 一個 page 是 8Kb~~所以 1Mb 的資料相當於有 128 個 pages!!
NTFS 預設 cluster 分割為 4Kb
若是撈 10Mb 的資料時,相當於撈 1280 個 pages,要讀 2560 個 cluster
若改 cluster 分割為 64 Kb,相當於一個 cluster 可放 8 個 pages,所以只要讀 160 個 cluster
磁碟 I/O 量相對降低,效能可提升一些些
但相對地,面對交易紀錄檔或是同詞曲上的零碎檔案會付出使用額外磁碟空間的代價
其實 DB 的結構設計、正規化、索引、...、也都是影響效能的因素之一,並非分割 cluster 成 64Kb 就跟吃大補丸一樣有顯著的提升


參考資料:http://msdn.microsoft.com/zh-tw/library/ms190969(v=SQL.100).aspx
                    http://www.dbworld.com.tw/