關(guān)于MySQL中savepoint語句使用時(shí)所出現(xiàn)的錯(cuò)誤
前幾天幫同事解決一個(gè)案例,在主從復(fù)制環(huán)境下,從庫上的MySQL版本號(hào)是5.5.5,遇到下面的錯(cuò)誤:
#其他非相關(guān)信息我都隱藏掉了 [(yejr@imysql.com)]> show slave status \G; Slave_IO_Running: Yes Slave_SQL_Running: No Last_Errno: 1064 Last_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. Default database: 'act'. Query: 'SAVEPOINT 6e86db84_14847168f19__8000' Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 1064 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. Default database: 'act_log'. Query: 'SAVEPOINT 6e86db84_14847168f19__8000'
第一感覺是遇到保留關(guān)鍵字了,不過看到這么長的字符串,不應(yīng)該是保留關(guān)鍵字才對。
經(jīng)過嘗試,最后發(fā)現(xiàn)是字符串中的 “e” 這個(gè)字符如果存在就可能會(huì)報(bào)錯(cuò),看起來應(yīng)該是bug才對了。
在MySQL的bug系統(tǒng)里確實(shí)找到了這個(gè)bug,不過看bug描述,在5.5版本中應(yīng)該是已經(jīng)修復(fù)了才對,看來太不靠譜了呀~~
關(guān)于這個(gè)bug:Savepoint identifier is occasionally considered as floating point numbers
其實(shí)除了升級(jí)版本外,解決方法也很簡單,把savepoint后面的 identifier 字符串用反引號(hào)(波浪號(hào)的下檔鍵,英文叫做 backticks 鍵)引用起來就行。
例如:
savepoint `6e86db84_14847168f19__8000`;
這樣就可以了。
這個(gè)案例也提示我們,在寫SQL時(shí),涉及到數(shù)據(jù)庫、表、字段、identifier 等名稱時(shí),最好是都能用反引號(hào)引用,確??捎谩?br /> 曾經(jīng)看到線上數(shù)據(jù)表有個(gè)字段名是 check ,這個(gè)名字在MySQL里很早就已經(jīng)是保留關(guān)鍵字,幸好開發(fā)同學(xué)比較靠譜,都加上了反引號(hào)。
關(guān)于savepoint的2個(gè)bug:
Savepoint Identifier should be enclosed with backticks
Savepoint identifier is occasionally considered as floating point numbers
相關(guān)文章
mysql使用自定義序列實(shí)現(xiàn)row_number功能(步驟詳解)
這篇文章主要介紹了mysql使用自定義序列實(shí)現(xiàn)row_number功能,本文分步驟通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-12-12navicat不能創(chuàng)建函數(shù)解決方法分享
這篇文章主要介紹了navicat不能創(chuàng)建函數(shù)解決方法分享,小編覺得還是挺不錯(cuò)的,這里分享給大家,供需要的朋友參考。2017-10-10MySQL報(bào)錯(cuò)?:Error?writing?file?‘/tmp/XXXX‘?(Errcode:?28?
這篇文章主要給大家介紹了MySQL報(bào)錯(cuò)解決:Error?writing?file?‘/tmp/XXXX‘?(Errcode:?28?-?No?space?left?on?device),文中通過代碼示例和圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10PHP MYSQL注入攻擊需要預(yù)防7個(gè)要點(diǎn)
這篇文章主要介紹了PHP MYSQL開發(fā)中,對于注入攻擊需要預(yù)防的7個(gè)要點(diǎn),大家需要注意了2013-11-11Mysql查看數(shù)據(jù)庫時(shí)區(qū)并設(shè)置時(shí)區(qū)的方法
這篇文章主要介紹了Mysql查看數(shù)據(jù)庫時(shí)區(qū)并設(shè)置時(shí)區(qū)的方法,設(shè)置時(shí)區(qū)的方式可以通過mysql命令行模式下動(dòng)態(tài)修改以及通過修改配置文件來修改時(shí)區(qū),需要的朋友可以參考下2024-02-02