close
資料庫的定序真的是一個被嚴重忽視的東西,
NT星球裡大部份人都知道要幫客戶的資料庫設定什麼定序
才不會讓這客戶在接下來的幾小時,甚至幾天內都哇哇叫個不停
不過,除了隱約記得它是資料庫裡字元集的排列方式這種沒人懂的說明外
我們還真的不太知道它是什麼
NT星球裡大部份人都知道要幫客戶的資料庫設定什麼定序
才不會讓這客戶在接下來的幾小時,甚至幾天內都哇哇叫個不停
不過,除了隱約記得它是資料庫裡字元集的排列方式這種沒人懂的說明外
我們還真的不太知道它是什麼
我相信這個情況並不止在NT星球發生
當課堂上到這一個部份時,大部份的同學表情木然,絲毫沒有受到一點感動
老師更沒有突然間HIGH起來
只有我,急忙把正在用來玩GAME的手機往旁邊一丟(歹勢啦)
瘋狂地在講義上抄下所有說明和範例
當課堂上到這一個部份時,大部份的同學表情木然,絲毫沒有受到一點感動
老師更沒有突然間HIGH起來
只有我,急忙把正在用來玩GAME的手機往旁邊一丟(歹勢啦)
瘋狂地在講義上抄下所有說明和範例
然後在下一個章節時又撿回手機繼續玩......
總之,我們來看什麼是定序。
先來看個簡單的資料表格
Customers資料表格裡有city欄位,當我們SELECT這個表格,下了ORDER BY city時
Customers資料表格裡有city欄位,當我們SELECT這個表格,下了ORDER BY city時
回傳的結果裡台北排在前面,彰化的彰因為筆劃最多所以排最後
一切看起來合情合理,天經地義
但事情並沒有如此單純,會以這種方式排列,只是因為SQL Server在台灣地區的預設定序是 Chinese_Taiwan_Stroke_CI_AS
啊不照筆劃排要用什麼排?
有趣就在這裡了,如果我們下了一個SELECT語法強制它用另一種定序的排列法傳回
我們看到的結果就會不同了
你發現雲林被排在最後了嗎?(沒發現?你眼睛要去檢查一下了!!)
SELECT customerid,city FROM dbo.Customers
ORDER BY city COLLATE Chinese_Taiwan_BOPOMOFO_CI_AI
ORDER BY city COLLATE Chinese_Taiwan_BOPOMOFO_CI_AI
在SELECT語法後面加上 COLLATE Chinese_Taiwan_BOPOMOFO_CI_AI 之後
就可以用指定的定序傳回資料
那這個BOPOMOFO又是什麼玩意兒?念念看......
(我想你現在的表情一定很可愛)
ㄅ...ㄆ...ㄇ...ㄈ...
所以在這種排列法下,雲林在最後面(你又猶豫了,注音符號沒學好厚?!)
什麼是定序:決定資料庫所使用的字元集、排序的方式
這句話,好像熊熊就給它懂了
這句話,好像熊熊就給它懂了
前陣子我的一些資料表函數就出了一些包,
客戶的SQL Server是英文版本,資料表函數這些暫存TABLE以Server的預設定序排列
而在建立資料庫時,我們又強制指定它採用Chinese_Taiwan_Stroke_CI_AS(非預設)
所以二個不同定序的表格要相互引用時,就發生了完全比對不起來的Error
我當時自然沒有如此心平氣和,在說了二百句"什麼鬼"之後
才在Google老師那裡找到原因和解法,
請慶大一一修改Function內容,強制指定回傳的定序才算解決
由於這個慘痛的經驗,我在課堂上沒有突然跳起來就已經算是很收斂了
另一個不喜歡定序的原因是名字太難記了,
從一台機器上看了定序設定,然後走到另一台Server也要照著設時,還沒看過有那幾個人可以記清楚的
不過,原來定序名稱的每一個部份都有其意義
[Chinese_Taiwan_Stroke]_CS_AS_WS
[SortRules] 用來識別指定字典排序時套用排序規則之字母或語言的字串。例如 Latin1_General 或Chinese_Taiwan_Stroke 。
Case Sensitivity CI 指定不區分大小寫,CS 指定區分大小寫
Accent Sensitivity AI 指定不區分腔調字,AS 指定區分腔調字(通常用在歐洲語系,如法文)
Kana Sensitivity KS 指定區分假名(用在日文)
Width Sensitivity WS 指定區分全半形,不寫就表示不區分
Case Sensitivity CI 指定不區分大小寫,CS 指定區分大小寫
Accent Sensitivity AI 指定不區分腔調字,AS 指定區分腔調字(通常用在歐洲語系,如法文)
Kana Sensitivity KS 指定區分假名(用在日文)
Width Sensitivity WS 指定區分全半形,不寫就表示不區分
BIN 指定要用的二進位排序順序,通常是區分大小寫、全半形。
例:_CS_AS_WS 區分大小寫、區分腔調字、區分全半形
例:_CS_AS_WS 區分大小寫、區分腔調字、區分全半形
這時候又要想起背後靈的那句話......"一堂再無聊的課,只要有學到一點點東西,這堂課就上得值得了。"
不過,這整套課程的第一階段入門篇已經結束了
從這個星期開始,我不但每次都得扛著重重的原文書去上課
課程內容更是充實到讓我從頭到尾狂抄筆記
最猛的是,原本三次的下課休息時間減少到一次,老師還切切叮嚀不可遲到
為了保持清醒,我甚至懷疑我的血管裡流的應該是咖啡而不是血液......
太扯了~~
總之先預告一下,最近在一個很忙的狀態,網誌又要停很久
再花時間寫網誌,我可能得拉著小麥麥一起去跳樓了
(不過我應該會把他丟下去之後才決定自己還是不要跳)
全站熱搜