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

MySQL SAVEPOINT 識別字元陷阱:含科學記號 'e' 導致語法錯誤的 Bug 與解法

     編輯:MySQL 資料庫相關知識

從庫複寫報錯 SAVEPOINT 6e86db84_14847168f19__8000 語法錯誤。經排查,識別字元串中含 e 且後接數字,被解析器誤判為科學記號浮點數(如 6e86 = 6×10^86)。MySQL Bug 系統確認:Savepoint identifier is occasionally considered as floating point numbers。

錯誤現場

Last_SQL_Error: Error 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '6e86db84_14847168f19__8000' at line 1' on query.
Query: 'SAVEPOINT 6e86db84_14847168f19__8000'

根因

  • 識別字元 6e86db84_14847168f19__8000 以數字開頭,含 e 後接數字,符合浮點數字面值模式。
  • 解析器在特定版本(5.5.5 等)未正確區分 SAVEPOINT 識別字元與數值字面值。
  • 官方 Bug 標註 5.5 已修復,但實測仍存在,屬回歸或修復不完整。

解決方案:反引號包裹識別字元

SAVEPOINT `6e86db84_14847168f19__8000`;

反引號(`,鍵盤波浪號鍵)強制將內容視為識別字元而非數值。

最佳實務:所有識別字元統一加反引號

  • 資料庫名、表名、欄位名、別名、SAVEPOINT 名、變數名……
  • 避免保留字衝突(如 check、order、group)。
  • 避免特殊字元、科學記號誤判。
  • 工具生成 SQL 時自動加反引號(如 mysqldump --quote-names、ORM 框架)。

相關 Bug 連結

養成加反引號習慣,規避 99% 的識別字元解析陷阱。

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