[워드프레스] utf8mb4 문자셋 문제로 DB 이전에 실패하는 경우

개요

최근에 워드프레스 사이트를 마이그레이션하면서 utf8mb4 문자셋 관련 문제를 겪은 적이 있습니다. 당시에는 sql 파일을 직접 수정하여 문제를 해결했습니다. 이 글에서는 직접 sql 파일을 수정하지 않고도 문제를 해결하는 방법에 대해 간단히 설명하겠습니다.

이때까지 utf8 인코딩을 사용하는 것으로 알고 있는데, 왜 갑자기 utf8mb4 문제가 발생하는 것일까요? 워드프레스 문서에 의하면 WordPress 4.2에서 테이블을 (가능한 경우) utf8mb4로 업그레이드한다고 합니다. 사이트는 다음 조건을 만족하는 경우에만 업그레이드됩니다.

  • utf8 문자셋(char set)을 현재 사용 중이고
  • MySQL 서버 버전이 5.5.3 이상(MariaDB의 모든10.x 버전 포함)이고
  • MySQL 클라이언트 라이브러리 버전이 5.5.3 이상. mysqlnd, 5.0.9 이상을 사용하는 경우.

예를 들어 로컬에서 워드프레스 작업을 한 후에 실제 사이트로 이전하기 위해 DB를 옮길 때 다음과 같은 오류가 발생할 수 있습니다.

#1273 - Unknown collation: 'utf8mb4_unicode_ci'

이런 오류가 발생하는 이유는 가져오기(Import)하려는 sql이 utf8mb4 인코딩을 사용하는 MySQL server version 5.5.3에서 만들어졌기 때문일 가능성이 높습니다.

실제로 Mac에서 로컬로 작업한 후에 실제 웹호스팅 서버로 이전하려는 경우에 이와 같은 문제가 나타나는 경우를 본 적이 있습니다. 이와 같은 문제가 발생하는 경우 다음과 같은 방법으로 문제를 해결할 수 있습니다.

먼저 DB 작업을 할 때에는 항상 백업을 해두도록 합니다. 이 작업을 수행하기 전에도 반드시 DB 백업을 하시기 바랍니다.

2017년 7월 추가: phpMyAdmin에서 커스텀 방법으로 DB 내보내기

아래의 내용은 잘 안 되는 경우가 많습니다. DB를 내보내기할 때 "호환성을 최대화 할 수 있는 데이터베이스 시스템 또는 예전 버전의 MySQL 서버"의 옵션을 MYSQL40으로 설정하면 문제가 해결될 수 있습니다.

[워드프레스] utf8mb4 문자셋 문제로 DB 이전에 실패하는 경우 2

하지만 이 방법을 사용해도 � 같은 이상한 문자가 많이 포함될 수 있다고 하네요. 그런 경우 TinyMCE WYSIWYG 편집기에서 문제를 일으킨다고 합니다. 페이지 많지 않으면 일일이 복사하여 붙여넣기 하면 되지만 그렇지 않으면 문제가 될 것 같습니다.

만약 이와 같이 이상한 문자가 포함되어 있는 경우에는 직접 sql 파일을 수정해야 할 것입니다. 이 같은 작업을 직접 하기가 어려우면 이 블로그의 서비스 문의란을 통해 서비스를 의뢰하실 수 있습니다.

플러그인 사용하기

WP Migrate DB

WP Migrate DB 플러그인을 사용하면 이런 문제를 해결할 수 있다고 합니다. 이 방법이 잘 안 되면 위에 설명된 수동으로 DB를 내보내기하는 방법을 사용하시기 바랍니다.

워드프레스 다운그레이드

WordPress 버전을 4.2 이전 버전으로 다운그레이드한 후에 DB를 내보내는 방법도 생각해볼 수 있습니다. 워드프레스 다운그레이드 방법은 이 글을 참고해보시기 바랍니다.

이상으로 'utf8mb4' 문자셋 문제로 워드프레스 이전 시 문제가 발생하는 경우에 대처할 수 있는 방법에 대해 살펴보았습니다. 워드프레스 사이트를 이전하려는 경우 이 글을 참고해보시기 바랍니다.


3개 댓글

  1. 글 잘 읽었습니다.

    현재 로컬에서 작업을하고 cafe24로 테이블 2개를 옮기려합니다.

    글에 써있는대로 Unknown collation: ‘utf8mb4_unicode_ci’ 오류가 뜨고있어서 아직 해결을 못했습니다.

    로컬에서 export할 때

    Database system or older MySQL server to maximize output compatibility with 옵션을

    mysql40으로 바꿔 주었는데도 해결이 안되고 있습니다.

    혹시나해서 로컬환경에서 테이블과 DB의 charset도 바꿔봤는데도 안되네요.

    어떻게해야할 지 감을 못잡고있습니다.

    워드프레스에서 기본적으로 제공하는 테이블이 아니라 직접 만든 테이블인데 이런것도 문제가 될까요?

    1. 안녕하세요? 댓글을 남겨주셔서 감사합니다.
      개인적으로는 DB의 charset 정보를 수정하여 문제를 해결했는데요, 문제셋 정보를 수정하여 문제가 해결되지 않는다면 ... 만약 전체 DB를 이전하는 경우에는 위에 제시된 다른 방법을 사용해볼 수 있겠지만 일부 테이블의 경우 어떤 식으로 접근하는 것이 좋을지 감이 잡히지 않네요. charset 정보를 잘못 수정한 것이 아닐까요?

      1. 답변해주셔서 감사합니다.

        새로만든 테이블 2개 옮기려는 목적이 플러그인을 만들었는데 그 플러그인으로 다루는 데이터를 따로 관리하고싶은 마음 때문이었습니다.

        아직 초보라 모르는게 많아 이것저것 알아보지않고 너무 성급하게 질문을 드린것 같아 죄송합니다.

        플러그인 안에서 테이블 만드는 명령어가 있어서 현재는 플러그인 설치하면 새로운 테이블 2개 생성하도록 했습니다.

        다시한번 신경써주셔서 고맙습니다.

댓글 남기기

* 이메일 주소는 공개되지 않습니다.