程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> 解析:校對確定 較為復雜的一些特殊情況

解析:校對確定 較為復雜的一些特殊情況

編輯:關於MYSQL數據庫

在絕大多數查詢中,MySQL使用哪種校對規則進行比較是很顯然的。例如,在下列情況中,校對規則明顯的是“列x的列校對規則”:

SELECT x FROM T ORDER BY x;
SELECT x FROM T WHERE x = x;
SELECT DISTINCT x FROM T;

但是,當涉及多個操作數時,可能不明確。例如:

SELECT x FROM T WHERE x = 'Y';

這個查詢應該使用列x的 校對規則,還是字符串文字'Y'的 校對規則?

標准化SQL使用“可壓縮性”規則解決這種問題。基本上,這個意思是:既然x和'Y'都有 校對規則,哪個校對規則優先?這可能比較難解決,但是以下規則適合大多數情況:

·一個外在的COLLATE子句可壓縮性是0(根本不能壓縮。)

·使用不同校對規則的兩個字符串連接的可壓縮性是1。

·列校對規則的可壓縮性是2。

·“系統常數”(如USER()或VERSION()函數返回的字符串)可壓縮性是3。

·文字規則的可壓縮性是4。

·NULL或從NULL派生的表達式的可壓縮性是 5。

上述可壓縮性值是MySQL5.1當前所用的。

這樣上述規則可以模糊解決:

·使用最低的可壓縮性值的校對規則。

·如果兩側有相同的可壓縮性,那麼如果校對規則不同則發生錯誤。

例如:

column1 = 'A'
 使用column1的校對規則
 
column1 = 'A' COLLATE x
 使用'A'的校對規則
 
column1 COLLATE x = 'A' COLLATE y
 錯誤

使用COERCIBILITY()函數確定一個字符串表達式的可壓縮性:

mysql> SELECT COERCIBILITY('A' COLLATE latin1_swedish_ci);
        -> 0
mysql> SELECT COERCIBILITY(VERSION());
        -> 3
MySQL> SELECT COERCIBILITY('A');
        -> 4

沒有系統常數或可忽略的壓縮性。函數如USER()的可壓縮性是2而不是3,文字的可壓縮性是3而不是4。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved