워드프레스·데이터베이스 한글이 `성명`처럼 깨졌을 때

서버 이전이나 업데이트, 데이터베이스 백업 뒤에 글의 한글이 성명이나 한글처럼 바뀌었나요? 데이터는 대부분 그대로 남아 있고, 읽는 문자 코드만 틀린 경우입니다. Mojibuster로 백업 파일을 복구한 다음, 데이터베이스의 원인을 바로잡으세요.

텍스트와 다음 파일을 지원합니다:

  • CSV
  • TXT
  • JSON
  • XML
  • SRT
  • VTT
  • SMI
  • TSV
  • MD
  • HTML
  • SQL
  • LOG

엑셀 내보내기, 데이터베이스 덤프, 자막, 웹사이트 코드 등.

복구하기

  1. 파일을 끌어다 놓거나 텍스트 붙여넣기
  2. 자동으로 복구
  3. 복사하거나 내려받기
또는 파일을 여기로 끌어다 놓기
  • 업로드 없음. 파일은 브라우저 안에서 복구되며 기기 밖으로 나가지 않습니다.

  • EU 내 서버. Mojibuster는 핀란드(EU)의 서버에서 운영되며 EU 일반 개인정보 보호법(GDPR)이 적용됩니다. GDPR 원문(EUR-Lex, 영어)

어떤 증상인가요

서버를 옮긴 뒤 SQL 덤프의 한 줄

복구 전

INSERT INTO wp_posts (post_title) VALUES ('한글 사랑 서울');

복구 후

INSERT INTO wp_posts (post_title) VALUES ('한글 사랑 서울');

원인은 어디에 있나요

워드프레스는 글을 UTF-8로 저장합니다. 그런데 오래된 설치본은 테이블을 latin1로 만들었거나 latin1로 접속하는 경우가 많습니다. 쓰기와 읽기에서 같은 실수를 하는 동안에는 아무도 눈치채지 못합니다. 새 서버로 옮기거나, phpMyAdmin으로 백업하거나, 접속 문자 집합을 바꾸는 순간 모든 한글이 한꺼번에 깨집니다.

  • wp-config.php의 DB_CHARSET이 latin1이거나 테이블과 맞지 않는다.
  • 덤프를 latin1로 내보내고 utf8mb4로 가져왔다(또는 그 반대).
  • 플러그인이나 가져오기 스크립트가 이미 깨진 텍스트를 한 번 더 변환했다. 이것이 이중 깨짐입니다.

백업 파일 복구하기

  1. 무엇이든 바꾸기 전에 데이터베이스를 백업합니다.
  2. 문제가 있는 테이블을 .sql 파일로 내보냅니다. phpMyAdmin도 되고, mysqldump --default-character-set=utf8mb4도 됩니다.
  3. 위 입력란에 파일을 끌어다 놓습니다. Mojibuster는 깨진 부분만 고치고 바뀐 곳을 모두 보여 줍니다.
  4. 복구된 파일을 내려받아 utf8mb4로 새 테스트용 데이터베이스에 가져옵니다.
  5. 사이트를 확인하고, 문제가 없으면 운영 데이터베이스에 가져옵니다.

덤프는 업로드되지 않습니다. 덤프에는 보통 회원 계정, 이메일 주소, 댓글이 들어 있으므로 중요한 점입니다.

직렬화된 데이터 주의

워드프레스는 일부 설정을 wp_options와 wp_postmeta에 s:6:"한글"; 같은 PHP 직렬화 값으로 저장합니다. 숫자는 글자 수가 아니라 바이트 수입니다. 깨진 글자를 되돌리면 길이가 맞지 않게 되어 워드프레스가 그 값을 버립니다. 그러니 wp_posts, wp_comments, wp_terms 같은 본문 테이블을 먼저 복구하세요. 옵션 값은 길이까지 갱신해 주는 WP-CLI의 wp search-replace가 더 알맞습니다.

MySQL에서 원인 바로잡기

  • 테이블과 접속을 utf8mb4로 바꾸고 wp-config.php에 define('DB_CHARSET', 'utf8mb4');를 설정합니다.
  • latin1 열에 UTF-8 바이트가 들어 있다면 바로 변환하지 마세요. 한 번 더 인코딩됩니다. 보통은 이진 형식을 거칩니다. 먼저 MODIFY … LONGBLOB, 그다음 MODIFY … LONGTEXT CHARACTER SET utf8mb4입니다.
  • 모든 변경은 먼저 데이터베이스 복사본에서 시험하세요.

자주 묻는 질문

워드프레스 데이터베이스 전체를 한 번에 복구할 수 있나요?

네, 큰 SQL 덤프도 처리됩니다. 다만 wp_options와 wp_postmeta의 직렬화 데이터는 WP-CLI가 더 적합합니다.

덤프 안의 멀쩡한 글자가 바뀌지는 않나요?

아니요. Mojibuster는 분명히 깨진 부분만 복구하고 올바른 텍스트는 그대로 둡니다.

utf8과 utf8mb4는 무엇이 다른가요?

MySQL의 utf8은 최대 3바이트 문자까지만 저장해서 이모지가 사라집니다. utf8mb4가 진짜 UTF-8이며 워드프레스에는 이쪽이 맞습니다.

워드프레스 말고 다른 시스템에도 쓸 수 있나요?

네. 그누보드, Joomla, Drupal, Magento, MySQL·MariaDB 기반 자체 서비스도 같은 문제와 같은 해결법이 적용됩니다.

관련 안내