首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL CAST 函數應支援 INT 作為 SIGNED 同義字:功能請求與標準對照

     編輯:MySQL 綜合教學

MySQL CAST 函數應支援 INT 作為 SIGNED 同義字:功能請求與標準對照

記錄 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                   |
+---------------------+

標準依據 (SQL-92)

  • <data type> 定義包含 INT、SMALLINT 等精確數值型別
  • <cast specification> ::= CAST ( <cast operand> AS <cast target> )
  • <cast target> ::= <domain name> | <data type>
  • DDL 欄位定義與 CAST 目標型別應使用相同 <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))
  • 統一 DDL 與 CAST 型別語法,降低遷移/多資料庫開發認知負擔

現狀

Bug 狀態:Verified (已驗證),歸類為 Feature Request (S4),待排程實作。

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