개발일지/Node.js

TypeORM + MySQL8 AsText does not exist

E-room 2024. 3. 12. 17:00
728x90

개발환경

  • node: v20.10.0
    • nestjs: v10.0.0
    • typeorm: v0.3.20
    • mysql2: v3.9.2
  • mysql: v8.0.0

 

문제. AsText does not exist

Mysql의 Point 타입을 사용해서 좌표 관련 기능을 구현하던 중, 문제가 발생했다.

 

typeorm의 조회관련 메서드를 사용해 DB에 SELECT 쿼리를 보냈더니 다음과 같은 에러가 발생했다.

QueryFailedError: FUNCTION db-name.AsText does not exist

 

원인.

대략 찾아보니 타 DB에는 공간(Spatial) 관련 타입을 처리할 때, AsText와 같은 함수가 존재해 이를 이용해서 조회를 할 수 있다고 한다.

 

그래서 Typeorm이 DB에서 해당 타입을 조회할 때, AsText를 사용하여 데이터를 가져온다.

 

하지만, Mysql 8버전에는 해당 함수가 없어서 위와 같은 오류가 발생한다.

 

해결.

검색을 해보니 스택오버플로우에서 나와 같은 문제를 겪은 사람이 있었다.

 

Type geometry in mysql -> AsText doesn't exist

I altered my db with a new column with type geometry. And then I am getting this error when I am trying to select something from my db. With select all and also with select of only one specific col...

stackoverflow.com

 

TypeOrm 모듈을 설정할 때, AsText 함수를 사용하여 조회하도록 하는 옵션을 끄면 간단히 해결된다.

TypeOrmModule.forRoot({
  legacySpatialSupport: false,

 

그리고 알고보니 설명서에도 친절하게 나와있다.

MysqlConnectionOptions

 

728x90