현재 utf8mb4_unicode_ci 정렬방식에 innoDB를 엔진으로 사용하고 있습니다.
현재 모든 테이블의 데이터들도 utf8mb4_unicode_ci로 반영되어 있고 class의 db도 utf8에서 utf8mb4로 수정한 상황입니다.
이모지 사용과 MySQL의 utf8 자료 저장 방식이 구형이라는 이야기를 듣고 테이블 또한 변경한 것인데 오류가 발생하고 있어 돌리려고 합니다.
이모지가 손실되는 것은 상관 없는데 혹시 다른 것들도 손실이 될 수 있는 것인지요?
그리고 서버 스펙은 innoDB를 사용할 정도의 스펙이 아닌데 사용하고 있어서 myisam으로 돌아가려고 하는데 문제가 생길 수 있을 까요?
추가적으로 utf8mb4_unicode_ci에서 utf8_general_ci로 변경하니까 자료형이 맞지 않는다고 하는데 int형이나 char형은 utf8이나 utf8mb4나 다름 없고 text 자료형만 다른 것이 아닌지요?
어떤 오류가 발생하나요? InnoDB로 변환한 후 오류가 날 경우 db.config.php에서 use_prepared_statements를 N으로 변경하면 해결될 때도 있습니다. 쿼리를 엉터리로 짜놓은 서드파티 자료들이 종종 이 부분에 걸립니다. 반면, utf8mb4 자체가 문제를 일으키는 경우는 대부분 인덱스 길이 때문으로, varchar(255) 필드를 varchar(191)로 줄여 주면 해결됩니다.
utf8mb4에서 utf8로 되돌린다고 이모지 외에 딱히 손실될 만한 것은 없지만, 디비를 직접 건드리는 데는 항상 위험부담이 따르니 미리 백업해 놓고 테이블 한두 개만 먼저 변환해 보시기 바랍니다. 참고로 charset과 collate는 항상 함께 바꾸어야 합니다. charset이 utf8mb4라면 collate도 utf8mb4_unicode_ci로 하셔야 하고, collate를 utf8_general_ci로 되돌린다면 charset도 마찬가지로 utf8이 되어야 합니다.
이모지 사용이 필요하신 거라면 documents, comments 테이블의 title, content 필드만 utf8mb4로 바꾸고 나머지는 모두 utf8로 놔두셔도 무방합니다. 아니면 공홈 자료실에 있는 MySQL UTF-8 이모티콘 지원 애드온을 사용하셔도 되고요.