9421: XML parsing: illegal xml character
SQL Server의미
SQL Server가 텍스트를 XML로 파싱하는 중 허용되지 않는(유효하지 않은) 문자를 만났다. 이 문자 때문에 XML 타입으로의 변환이나 XML 컬럼/변수에 대한 대입이 실패했다.
원인
XML 1.0에서 금지된 제어 문자(예: 0x00-0x1F 범위의 일부 문자), 잘못된 인코딩(인코딩 불일치), 다른 소스에서 온 손상되었거나 정제되지 않은 데이터가 원인이다. 보통 CAST(... AS XML) 또는 XML 컬럼에 INSERT할 때 나타난다.
해결 방법
XML로 변환하기 전에 텍스트에서 유효하지 않은 문자를 제거한다. 소스 인코딩(UTF-8/UTF-16)을 대상과 호환되게 하고 XML 선언에 올바른 인코딩을 명시한다. REPLACE/NCHAR로 제어 문자를 제거하거나, 애플리케이션 계층에서 표준 라이브러리로 XML을 생성하고 검증한다. 원시 텍스트를 저장해야 한다면 NVARCHAR(MAX)를 고려한다.
같은 데이터베이스의 다른 항목
- 3729Cannot DROP because it is being referenced by object (객체가 참조 중이어서 DROP 불가)
- 3961Snapshot isolation transaction failed because the object was modified by a DDL statement (객체가 DDL로 변경되어 스냅샷 격리 트랜잭션 실패)
- 1785Introducing FOREIGN KEY constraint may cause cycles or multiple cascade paths (FOREIGN KEY 제약 조건이 순환 또는 다중 cascade 경로를 만들 수 있음)
- 15151Cannot find the object/principal because it does not exist or you do not have permission (객체/보안 주체가 존재하지 않거나 권한이 없어 찾을 수 없음)
- 4834You do not have permission to use the bulk load statement (bulk load 문을 사용할 권한 없음)
- 10928Resource limit for the database has been reached (Azure SQL) (데이터베이스 리소스 한도 도달)
- 40544The database has reached its size quota (Azure SQL) (데이터베이스 크기 할당량 도달)