首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 校對規則強制性:COERCIBILITY 與隱式轉換優先級詳解

     編輯:MySQL 資料庫相關知識

常見明確場景

單欄位操作(ORDER BY x、WHERE x = x、DISTINCT x)校對顯然為「欄位 x 的校對」。

多操作數衝突解決:可強制性

標準 SQL 採用「可強制性」規則,數值越小優先級越高:

可強制性值來源
0顯式 COLLATE 子句(不可強制)
1不同校對字符串連接結果
2欄位校對
3系統常數(USER()、VERSION())
4字面值字面量
5NULL 或派生自 NULL 的表達式

解決規則

  1. 採用可強制性值最小的校對。
  2. 雙方可強制性相同但校對不同 → 報錯。

範例

column1 = 'A'                -- 用 column1 校對 (2 vs 4)
column1 = 'A' COLLATE x      -- 用 'A' 校對 (2 vs 0)
column1 COLLATE x = 'A' COLLATE y  -- 錯誤 (0 vs 0 但校對不同)

COERCIBILITY() 函數

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

註:無系統常數或可忽略強制性。函數如 USER() 可強制性為 2 而非 3,字面值為 3 而非 4(舊版本差異)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved