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

MySQL 運算符優先級與隱式類型轉換完整參考手冊

     編輯:MySQL 資料庫相關知識

運算符分類與優先級 (高→低)

優先級運算符說明
1BINARY, COLLATE字元集/排序規則轉換
2NOT, !邏輯非
3^位異或
4XOR邏輯異或
5- (一元), ~負號、位取反
6*, /, %乘除模
7+, -加減
8<<, >>位左移/右移
9&位與
10|位或
11=, <=>, !=, <>, <, <=, >, >=, IN, IS, LIKE, REGEXP比較運算
12BETWEEN, CASE, WHEN, THEN, ELSE範圍/條件
13AND, &&邏輯與
14OR, ||邏輯或
15:=賦值

關鍵比較運算符細節

  • <=>:NULL 安全等值,NULL <=> NULL 為真
  • IN (val1,val2...):集合成員檢查
  • BETWEEN a AND b:含邊界
  • LIKE:% 任意長度、_ 單字元、預設不區分大小寫
  • REGEXP:正則表達式匹配
  • IS NULL / IS NOT NULL:唯一能判斷 NULL 的標準方式

隱式類型轉換規則

1 + '2'      → 1 + 2 = 3          (字串轉數值)
1 + 'abc'    → 1 + 0 = 1          (非數值字串轉 0)
'2023-01-01' + 0 → 20230101       (日期轉數值)
DATE '2023-01-01' + INTERVAL 1 DAY → 日期運算

陷阱與最佳實踐

  • 索引失效首因:WHERE varchar_col = 123 觸發隱式轉換,索引不生效 → 寫 '123'
  • 超範圍/非法值:MySQL 會截斷或轉 0 並發 Warning,需用 SHOW WARNINGS 捕獲
  • 明確轉換:用 CAST(expr AS TYPE)、CONVERT(expr, TYPE) 讓意圖可見
  • 字串比較:非二進制字串按字符集排序規則 (通常不區分大小寫);二進制字串 (BLOB/BINARY) 按字節值比較 (區分大小寫)

快速測試模板

SELECT 
  1 + '2' AS t1,
  1 + 'abc' AS t2,
  'abc' = 'ABC' AS case_insensitive,
  BINARY 'abc' = 'ABC' AS case_sensitive,
  CAST('123' AS UNSIGNED) AS explicit_cast;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved