記錄 MySQL 官方 Bug #73054:CAST(expr AS INT) 語法報錯,需改用 CAST(expr AS SIGNED),違反 SQL 標準與跨資料庫相容性。
mysql> SELECT CAST('5' AS INT);
ERROR 1064 (42000): You have an error in your SQL syntax...
mysql> SELECT CAST('5' AS SIGNED);
+---------------------+
| CAST('5' AS SIGNED) |
+---------------------+
| 5 |
+---------------------+
<data type> 定義包含 INT、SMALLINT 等精確數值型別<cast specification> ::= CAST ( <cast operand> AS <cast target> )<cast target> ::= <domain name> | <data type><data type> 語法| 資料庫 | CAST('5' AS INT) | 備註 |
|---|---|---|
| Oracle 11g | ✅ 支援 | 標準相容 |
| PostgreSQL | ✅ 支援 | |
| SQL Server | ✅ 支援 | |
| MySQL | ❌ 語法錯誤 | 需用 SIGNED/UNSIGNED |
INT -> SIGNED
INTEGER -> SIGNED
SMALLINT -> SIGNED SMALLINT
TINYINT -> SIGNED TINYINT
MEDIUMINT -> SIGNED MEDIUMINT
BIGINT -> SIGNED BIGINT
-- 對應 UNSIGNED 版本亦應支援
CAST(expr AS TIMESTAMP(fsp)) 指定小數秒精度CAST(300 AS TINYINT))Bug 狀態:Verified (已驗證),歸類為 Feature Request (S4),待排程實作。