3140: ER_INVALID_JSON_TEXT: Invalid JSON text
MySQL의미
유효하지 않은(구문이 깨진) JSON 텍스트가 JSON 컬럼이나 JSON 함수에 전달되었다. MySQL은 값을 JSON으로 파싱할 수 없어 작업을 거부한다.
원인
닫히지 않은 따옴표/괄호, 후행 쉼표, 작은따옴표, 이스케이프 문자 오류, 또는 JSON 컬럼에 일반 텍스트를 보낸 경우다. JSON_SET, JSON_INSERT 같은 함수나 JSON 타입 컬럼에 잘못된 형식의 텍스트를 전달할 때 나타난다.
해결 방법
JSON 텍스트를 올바른 구문으로 수정한다: 큰따옴표를 사용하고, 후행 쉼표를 제거하고, 이스케이프를 확인한다. 텍스트 유효성 테스트: SELECT JSON_VALID('{...}'); (유효하면 1 반환). 애플리케이션 계층에서 신뢰할 수 있는 라이브러리로 JSON을 직렬화하고 서버로 보내기 전에 검증한다.
같은 데이터베이스의 다른 항목
- 1118ER_TOO_BIG_ROWSIZE: Row size too large
- 1170ER_BLOB_KEY_WITHOUT_LENGTH: BLOB/TEXT column used in key specification without a key length (키 길이 없이 BLOB/TEXT 컬럼을 키에 사용함)
- 1592ER_BINLOG_UNSAFE_STATEMENT: Unsafe statement written to the binary log (binary log에 안전하지 않은 문장 기록)
- 1526ER_NO_PARTITION_FOR_GIVEN_VALUE: Table has no partition for value (해당 값에 대한 파티션 없음)
- 1049Unknown database 'name'
- 1364Field 'name' doesn't have a default value (필드에 기본값 없음)
- 1206The total number of locks exceeds the lock table size (전체 락 수가 락 테이블 크기 초과)