본문 바로가기
IT tech Coding/mysql

PHP에서 JSON 데이터를 MariaDB에 저장할 때 주의할 점 (최대 문자수와 예외 처리)

by Coding Life 2025. 5. 14.
php 7.3버전, mariadb-10.x (UTF-8) 버전을 사용하고 있다. json형태로 table의 행의 컬럼에 최대 들어갈 수 있는 문자수는 몇개인가요? json 형태로 만약 그 양을 넘어가면 어떻게 처리될까요?

 

PHP 7.3 + MariaDB 10.x(UTF-8) 환경에서 JSON 형태의 데이터를 테이블의 컬럼에 저장할 수 있는 최대 길이는 해당 컬럼의 데이터 타입에 따라 결정됩니다.

 


✅ 1. 컬럼 타입별 최대 문자 수

데이터 타입 최대 바이트 수 최대 문자 수 (UTF-8) 기준

TINYTEXT 255 bytes 약 85자 (한글 포함 시 더 줄어듦)
TEXT 65,535 bytes 약 21,000자
MEDIUMTEXT 16,777,215 bytes 약 5,592,405자
LONGTEXT 4,294,967,295 bytes 약 1.4억 자 (실제 사용 불가에 가까움)

UTF-8은 문자당 최대 3~4 bytes를 사용하므로 한글 포함 시 1문자 ≈ 3 bytes로 계산하는 게 안전합니다.


 

✅ 2. JSON 형태로 저장 시 주의할 점

  • json_encode()로 PHP에서 생성한 JSON 문자열은 일반 문자열일 뿐입니다. MySQL 5.7 이상처럼 JSON 타입이 따로 있는 것이 아니라면 MariaDB에서는 그냥 TEXT에 저장합니다.
  • TEXT 타입이면 65,535 bytes (약 21,000~22,000자 정도) 초과 시 데이터가 잘립니다. (경고 없이 손실될 수도 있음)
  • PHP나 JavaScript에서 이 JSON을 json_decode()할 때 손상된 JSON 문자열이면 오류가 발생합니다.

 

✅ 3. 초과했을 때의 현상

  1. INSERT/UPDATE 시
    • TEXT를 초과하는 데이터를 INSERT 하면 MySQL/MariaDB는 잘라서 저장하거나 오류를 반환할 수 있습니다.
    • STRICT 모드에서는 오류 발생.
    • NON-STRICT 모드에서는 잘리고 경고 발생.
  2. PHP에서는
    • json_encode()는 매우 큰 JSON도 만들 수 있지만, 데이터베이스에 넣기 전에 잘릴 수 있다는 점을 고려해야 함.
    • 저장된 JSON이 잘려 있으면 json_decode() 시 false가 반환되며, json_last_error()를 통해 오류 확인 가능.

✅ 4. 안전한 추천 방법

  • 가벼운 JSON 데이터: TEXT 컬럼으로 충분.
  • 무거운 JSON 데이터 (예: 수천~수만 개 객체):
    • MEDIUMTEXT 또는 LONGTEXT로 변경.
    • 혹은 JSON 필드를 쪼개서 여러 컬럼으로 분리하거나 별도 테이블로 분리 저장.

✅ 예시: 컬럼 정의

ALTER TABLE your_table ADD COLUMN data_json MEDIUMTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

필요하다면 해당 테이블에 들어갈 최대 길이를 초과하지 않도록 PHP에서 아래처럼 체크할 수 있습니다:

$json = json_encode($yourData);
if (strlen($json) > 65535) {
    echo "데이터가 TEXT 한계를 초과했습니다.";
}

 

 

 

 

  • #TEXT 컬럼에 JSON 데이터를 저장할 때 최대 길이는? PHP + MariaDB 환경 완전 정리,
  • #PHP에서 JSON 데이터를 MariaDB에 저장할 때 주의할 점 (최대 문자수와 예외 처리),
  • #JSON이 너무 길면 어떻게 될까? PHP 7.3 + MariaDB 저장 한계와 대응법,
  • #MariaDB에 JSON 저장 시 잘리는 이유? 최대 문자수와 처리 방법 설명

 

반응형