개발/MySQL

[MySQL] 작은 따옴표가 추가 되는 에러 - MySQL 예약어 오류

Monsh 2021. 1. 22. 12:30
반응형

도무지 이해할 수 없는 에러를 만났다.

이해할 수 없는 작은 따옴표

파라미터로 넘어온 문자열 뒤에 왜 작은 따옴표가 추가되었는지 알 수 없었다.

게다가 SyntaxError라고만 알려주고 있다.

 

쿼리에 오타가 있는가 해서 봤지만 없었다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="tk.monsh.springbootpractice.mapper.OrderMapper">
 
<select id="getOrder" parameterType="String" resultType="Order">
    SELECT        order_id            as orderId,
                user_id                as userId,
                order_date            as orderDate,
                is_purchased        as isPurchased
    FROM        order
    WHERE        1=1
    AND            user_id = #{username}
</select>
 
</mapper>
cs

XML mapper는 위와 같다. 오타가 없다.

 

검색하다가 예약어 때문에 문제가 발생했다는 포스팅을 보게 되었는데,

같은 증상은 아니었지만 혹시 하는 마음에 검색해 보았다.

 

MySQL 예약어(출처 : 제타위키)
https://zetawiki.com/wiki/MySQL_%EC%98%88%EC%95%BD%EC%96%B4

 

MySQL 예약어 - 제타위키

다음 문자열 포함...

zetawiki.com

예약어에 ORDER가 있다.

ORDER BY 때문에 ORDER 키워드가 예약어로 지정이 되어 있는 것 같다.

 

그래서, 쿼리를 다음과 같이 바꾸었다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="tk.monsh.springbootpractice.mapper.OrderMapper">
 
<select id="getOrder" parameterType="String" resultType="Order">
    SELECT        order_id            as orderId,
                user_id                as userId,
                order_date            as orderDate,
                is_purchased        as isPurchased
    FROM        `order`
    WHERE        1=1
    AND            user_id = #{username}
</select>
 
</mapper>
cs

테이블명 order 앞뒤로 `를 붙였다.

문제 해결.

반응형