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

MySQL 與 SQL Server 類型轉換差異:CONVERT 函數參數順序與目標類型對照

     編輯:MySQL 資料庫相關知識

SQL Server → MySQL 遷移中,CONVERT 函數參數順序相反、目標類型關鍵字不同、特殊識別符語法差異,是 SQL 改寫高頻踩坑點。本文整理對照表與最佳實踐。

核心差異對照

項目SQL ServerMySQL關鍵差異
語法CONVERT(target_type, expression)CONVERT(expression, target_type)參數順序相反
整數轉換CONVERT(INT, Port)CONVERT(Port, SIGNED) 或 CAST(Port AS SIGNED)類型關鍵字不同
結果別名自動繼承欄位名必須加 AS \`port\`,否則結果欄位名為 CONVERT(Port, SIGNED)別名強制要求
特殊識別符方括號 [Port]反引號 \`Port\` (鍵盤 Esc 下鍵)語法不同

MySQL CONVERT 目標類型完整列表

第二個參數 (目標類型) 只能是以下值之一:

類型關鍵字說明範例
BINARY[(N)]二進位字串,N 位元組長度CONVERT(str, BINARY) 區分大小寫比較
CHAR[(N)]字符串,N 字符長度CONVERT(num, CHAR) 數字轉字串
DATE日期CONVERT('2023-01-01', DATE)
DATETIME日期時間CONVERT('2023-01-01 12:00', DATETIME)
DECIMAL定點數 (可指定精度 DECIMAL(10,2))CONVERT('123.45', DECIMAL(10,2))
SIGNED [INTEGER]有符號整數CONVERT('123', SIGNED)
TIME時間CONVERT('12:30:00', TIME)
UNSIGNED [INTEGER]無符號整數CONVERT('123', UNSIGNED)

遷移改寫實戰範例

1. 整數轉換 + 別名

-- SQL Server
SELECT CONVERT(INT, Port) AS Port FROM ServerConfig;

-- MySQL (推薦 CAST,標準 SQL)
SELECT CAST(`Port` AS SIGNED) AS `Port` FROM `ServerConfig`;

-- 或 CONVERT
SELECT CONVERT(`Port`, SIGNED) AS `Port` FROM `ServerConfig`;

2. 日期轉換

-- SQL Server
SELECT CONVERT(DATE, CreateTime) FROM Logs;

-- MySQL
SELECT CAST(`CreateTime` AS DATE) AS `CreateDate` FROM `Logs`;
-- 或 DATE() 函數更簡潔
SELECT DATE(`CreateTime`) AS `CreateDate` FROM `Logs`;

3. 字符串轉換與大小寫敏感比較

-- SQL Server: 不區分大小寫預設
WHERE [UserName] = 'Admin'

-- MySQL: 區分大小寫比較
WHERE BINARY `UserName` = 'Admin'
-- 或
WHERE CONVERT(`UserName`, BINARY) = 'Admin'
-- 或欄位定義為 VARBINARY / COLLATE utf8mb4_bin

4. 特殊識別符處理

-- SQL Server 保留字/特殊字符欄位
SELECT [Order], [Group], [User Name] FROM [Order Details];

-- MySQL 反引號包裹
SELECT `Order`, `Group`, `User Name` FROM `Order Details`;

遷移檢查清單

  1. 全域搜尋 CONVERT(,逐個檢查參數順序與目標類型映射
  2. 所有 CONVERT 結果欄位補充 AS \`alias\`
  3. 方括號 [...] 批次替換為反引號 \`...\` (工具:正則 \[([^\]]+)\] → `$1`)
  4. 隱式轉換場景 (WHERE 字符串欄位比數字) 顯式加 CAST/CONVERT 避免索引失效
  5. 執行測試集驗證結果集結構與內容一致

最佳實踐建議

  1. 優先用標準 SQL CAST(expr AS type): 跨資料庫可移植、可讀性高、參數順序固定 (expr AS type)。
  2. 簡單類型轉換用專用函數: DATE()/TIME()/CAST(... AS UNSIGNED) 更語義化。
  3. 避免在 WHERE 條件欄位上做轉換: 導致索引失效,改寫為常數轉換或範圍查詢。
  4. 建立類型映射字典表: 團隊統一維護 SQL Server ↔ MySQL 類型對照,新人入職必讀。

類型轉換看似微小,實則是異構遷移「細節決定成敗」的典型代表。建立對照表、工具化替換、測試驗證三步走,讓 CONVERT 遷移零驚險。

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