當字符串字段存儲純數字(如 ID、排序值)需按數值排序或篩選時,隱式轉換會導致索引失效。必須顯式轉型:
| 特性 | CAST(expr AS type) | CONVERT(expr, type) |
|---|---|---|
| 語法標準 | SQL:2003 標準 | MySQL 擴展/ODBC 風格 |
| 可讀性 | 高(類函數調用) | 中 |
| 支援類型 | BINARY, CHAR, DATE, DATETIME, DECIMAL, SIGNED, TIME, UNSIGNED | 同左 |
| 性能 | 基本一致 | 基本一致 |
-- 推薦:CAST 語法更清晰 SELECT server_id FROM cardserver WHERE game_id = 1 ORDER BY CAST(server_id AS SIGNED) DESC LIMIT 10; -- 等價 CONVERT 寫法 SELECT server_id FROM cardserver WHERE game_id = 1 ORDER BY CONVERT(server_id, SIGNED) DESC LIMIT 10;
-- 有符號整數(可存負數) SELECT * FROM gyzd_yysinfo ORDER BY CAST(yysid AS SIGNED INTEGER); -- 無符號整數(僅正數,範圍翻倍) SELECT * FROM gyzd_yysinfo ORDER BY CAST(yysid AS UNSIGNED INTEGER);
CAST('123abc' AS SIGNED) → 123(截取前導數字)並產生 WarningCAST('' AS SIGNED) → 0CASE WHEN 預校驗WHERE CAST(col AS SIGNED) > 100 無法用到索引col_int INT GENERATED ALWAYS AS (CAST(col AS SIGNED)) STORED 並建索引(MySQL 5.7+)掌握顯式類型轉換,是解決「字符串存數字」歷史包袱的關鍵技能。