본문 바로가기
Dev/DataBase

[MariaDB] ERROR 1406 (22001): Data too long for column 'id' at row 1

by nakanara 2023. 1. 13.
반응형

 

 

AWS-RDBS for MariaDB에서 어느 시점부터 발생 재귀 쿼리 일부에서 발생(? 데이터 속성 탓인가)

ERROR 1406 (22001): Data too long for column 'str' at row 1

계층형(재귀) 쿼리에서 UNION을 통한 비특정 데이터 연결하는 과정에서 데이터 속성의 길이가 달라서 발생
오라클은 이런 건 없었던 것 같은데😥

비엄격 SQL 모드에서는 괜찮지만, 엄격 SQL모드에서는 오류 발생(STRICT_TRANS_TABLES 모드 활성화 시)

-- 발생 소스
WITH RECURSIVE cte AS
(
  SELECT 1 AS n, 'abc' AS str
  UNION ALL
  SELECT n + 1, CONCAT(str, str) FROM cte WHERE n < 3
)
SELECT * FROM cte;

문제 해결 방법은 데이터 길이를 맞춰야 함(데이터 길이 확인 후 넉넉하게 설정 - 부족할 경우 글자 잘림)
convert 함수를 통해 데이터 유형 변경

WITH RECURSIVE cte AS
(
  SELECT 1 AS n, CONVERT('abc', VARCHAR(20)) AS str
  UNION ALL
  SELECT n + 1, convert(CONCAT(str, str), VARCHAR(20)) FROM cte WHERE n < 3
)
SELECT * FROM cte;

WITH RECURSIVE cte AS
(
  SELECT 1 AS n, CONVERT('abc', VARCHAR(20)) AS str
  UNION ALL
  SELECT n + 1, convert(CONCAT(str, str), VARCHAR(20)) FROM cte WHERE n < 10 -- 반복문 증가
)
SELECT * FROM cte;

글자 잘림

참고

반응형