mysql 구문 에러
안녕하세요 @realmankwon입니다.
어제 스몬봇을 업그레이드 하면서 생각지 못한 에러가 났습니다.
원래 DB 와의 연동은 sequelize로 하고 있었는데 서버를 분리하여 사용하면서 mysql 라이브러리로 직접 접속을 해야하는 건이 생겼습니다.
sequelize에서는 쿼리문을 작성하지 않아도 되지만 mysql 라이브러리를 사용하다보니 쿼리를 직접 작성해야 했습니다.
단순하게 특정값만 업데이트 하면 되는 것인데 syntax 에러가 나니 또 답답한 상황이 되었습니다.
Error: ER_PARSE_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
처음에는 db의 값의 type 이 decimal인데 문자열을 넣어서 그런가 싶어서 수정을 했습니다.
결과는 그대로였습니다.
기본적으로 decimal 에 소수점 자리수를 입력해 놓으면 소수점 자리수가 큰 것이 들어와도 명시된 자리수만 자동으로 들어갑니다.
혹시나 싶어서 자리수도 맞췄지만 소용이 없었습니다.
그래서 딱 한 컬럼만 update 문에 남겨뒀는데도 에러가 났습니다.
혹시나 해서 다른 컬럼을 해봤는데... 앗 실행이 되었습니다.
뭔가 이상함이 느껴져서 위의 쿼리를 dbms 툴로 실행을 시켜보았습니다.
그랬더니 세상에....
dec 가 mysql 의 예약어였습니다.
오라클도 마찬가지지만 예약어로 잡힌 것을 컬럼으로 사용하면 실행이 되지 않습니다.
현재 사용자의 dec 양을 보여줄려고 저장을 할려고 컬럼명을 dec로 잡았는데 그게 화근이었던 겁니다.
그래서 이름을 dec_quantity로 변경하였더니 아주 잘 되는군요.ㅜㅜ
에러가 생길때마다 수정을 하지만 원인을 알아내는 것이 참 힘든 것 같습니다.
이번 건도 별거 아닌 건데 거의 3시간을 잡고 있었군요...
저 에러는 보통 다음의 것에서 일어난다고 합니다.
- type 이 다를때
 - , 가 빠졌을 때
 - 문자열에 ''이 빠졌을 때
 - 구문상의 오류 (예 , from 이 빠졌다, where가 빠졌다, update 문에 set 없다 등등)
 
저의 경우는 예약어를 컬럼으로 쓰는 바람에 쿼리문을 실행할때 예약어 dec 에 대한 구문이 아니어서 저 에러가 발생을 한 것입니다.
컬럼명을 사용할때는 꼭 예약어인진 확인을 해야 저같은 삽질을 덜 할 수 있습니다. ^^


@upvu voted. voting percent : 32.19 %, delegate sp : 11290, token amount : 10100, total sp of upvu : 1262437
@realmankwon transfered 24 KRWP to @krwp.burn. voting percent : 78.80%, voting power : 87.02%, steem power : 1829145.14, STU KRW : 1200.
@realmankwon staking status : 8000 KRWP
@realmankwon limit for KRWP voting service : 24 KRWP (rate : 0.003)
What you sent : 24 KRWP [44631005 - 2b9ae8af1c672bc31e0e1ef11462feca440c2226]