피드로 돌아가기
The 200-byte trap: why WordPress core updates break Arabic URLs
Dev.toDev.to
Database

WordPress Core의 VARCHAR(200) 제약으로 인한 아랍어 URL 데이터 손실 해결

The 200-byte trap: why WordPress core updates break Arabic URLs

Jaafar Abazid2026년 6월 21일19intermediate

Context

WordPress Core가 URL slug 저장 시 VARCHAR(200)을 하드코딩하여 사용함. 아랍어는 UTF-8 인코딩 및 Percent-encoding 과정에서 문자당 약 6바이트를 소모하여, 실제 저장 가능 글자 수가 약 33자로 급감하는 병목 발생.

Technical Solution

  • Storage Layer 확장: ALTER TABLE을 통해 post_nameslug 컬럼을 VARCHAR(1024)로 확장하여 저장 공간 확보
  • Core Update 메커니즘 분석: dbDelta() 함수가 canonical schema와 실제 DB를 비교하여 일치하지 않을 경우 자동으로 ALTER TABLE을 수행해 200바이트로 축소하는 프로세스 식별
  • Data Loss 원인 파악: dbDelta가 TEXT/BLOB 타입과 달리 VARCHAR 타입의 축소 시 데이터 보호 로직이 부재하여 200바이트 초과 데이터가 즉시 삭제됨을 확인
  • 다층적 제약 해결: 단순 DB 확장 외에 PHP 레벨의 Slug Generation 및 De-duplication 로직에 포함된 200바이트 하드코딩 값에 대한 오버라이드 필요성 도출
  • 상시 모니터링 체계 구축: information_schema.COLUMNS를 쿼리하여 컬럼 길이를 검증하고, 축소 발생 시 즉시 알림을 보내는 검증 로직 구현

- 프레임워크의 DB Schema 자동 업데이트(Auto-migration) 도구가 기존 데이터 길이를 강제로 축소하는지 검토 - 다국어 처리 시 원본 텍스트가 아닌 인코딩 후의 최대 바이트 길이를 기준으로 Storage 용량 설계 - DB 스키마 변경 사항이 코어 업데이트나 외부 라이브러리에 의해 덮어쓰여지는지 확인하는 Regression Test 구축

원문 읽기