[MySQL/PHP] "Server sent charset (255) unknown to the client" 에러 원인과 해결 방법 (AWS Aurora/RDS 적용)

 개발을 하다 보면 간혹 잘 작동하던 서비스나 새로 이전한 환경에서 뜬금없는 DB 연결 에러를 마주하곤 합니다. 오늘 정리할 오류는 PHP(특히 CodeIgniter 등 구형 프레임워크나 레거시 환경)에서 MySQL 8.0 이상(또는 AWS Aurora MySQL v3 등) 버전에 연결할 때 발생하는 전형적인 문자셋(Character Set) 에러입니다.

1. 발생한 에러 메시지

어느 날 갑자기 아래와 같은 PHP Warning 에러가 발생하며 DB 연결이 끊어지는 현상이 나타납니다.


Severity: Warning

Message: mysqli::real_connect(): Server sent charset (255) unknown to the client. Please, report to the developers

Filename: mysqli/mysqli_driver.php

Line Number: 161

이어서 (HY000/2054): Server sent charset unknown to the client 라는 메시지도 함께 출력됩니다.


2. 왜 발생했을까? (원인 분석)

이 에러의 핵심은 "DB 서버가 쓰는 최신 표준 언어(문자셋)를 구형 PHP 클라이언트가 알아듣지 못해서" 발생합니다.

  1. MySQL 8.0+ / Aurora v3+의 변화: MySQL 8.0 버전부터 기본 문자셋(Default Character Set)이 기존 utf8에서 이모지까지 완벽 지원하는 utf8mb4로 변경되었습니다. 이때 서버가 클라이언트에 전달하는 문자셋 인덱스 번호가 255번입니다.

  2. 구형 PHP 클라이언트 라이브러리의 한계: 서버에 접속하는 PHP 환경이 다소 오래되었거나(PHP 7.2 이하 등), 내부의 php-mysqlnd 라이브러리가 구버전일 경우 이 255번(utf8mb4)이라는 문자셋의 존재 자체를 인지하지 못합니다.

  3. 결과: PHP가 "서버가 보낸 255번 문자셋이 뭔지 모르겠어!"라며 연결을 거부하고 에러를 뿜어내게 됩니다.

3. 해결 방법 (AWS Aurora / RDS 기준)

이 문제를 해결하는 가장 확실한 방법은 DB 서버가 클라이언트와 연결을 맺을 때, 구형 클라이언트도 이해할 수 있는 utf8로 대화하도록 세션 설정을 맞춰주는 것입니다.

AWS Aurora MySQL 또는 RDS를 사용 중이라면 아래 단계를 통해 간단히 해결할 수 있습니다.

AWS 파라미터 그룹 변경 단계

  1. AWS RDS 콘솔에 접속합니다.

  2. 좌측 메뉴에서 파라미터 그룹 (Parameter Groups)으로 이동합니다.

  3. 현재 에러가 발생한 DB 인스턴스가 사용 중인 인스턴스/클러스터 파라미터 그룹을 선택하고 편집(Edit)을 누릅니다.

  4. 아래 3가지 파라미터의 값을 찾아 모두 utf8로 변경합니다.

    • character_set_client ➡️ utf8

    • character_set_connection ➡️ utf8

    • character_set_server ➡️ utf8

  5. 변경 사항을 저장한 후, 설정이 적용되도록 해당 DB 인스턴스(혹은 클러스터)를 재시작(Reboot) 해줍니다.

💡 결과 확인 재시작이 완료된 후 서비스를 다시 호출해 보면, 드라이버와 DB가 서로 알아들을 수 있는 utf8로 악수를 나누며 접속 에러가 말끔히 해결된 것을 볼 수 있습니다.

4. 향후 근본적인 해결을 위한 팁 (Long-term Option)

위의 임시 조치로 급한 불은 껐지만, utf8 설정은 이모지(😀, 👍 등)가 포함된 4바이트 문자 데이터 저장 시 오류가 나거나 데이터가 깨질 수 있는 한계가 있습니다.

나중에 서비스를 개편하거나 인프라를 고도화할 기회가 온다면 아래 순서로 근본적인 해결을 진행하는 것이 좋습니다.

  • PHP 버전 업그레이드: PHP 버전을 PHP 7.4 이상(권장: PHP 8.x)으로 업그레이드합니다.

  • 최신 PHP 버전은 기본적으로 utf8mb4를 완벽히 네이티브 지원하므로, DB 파라미터를 다시 utf8mb4로 올리더라도 아무런 문제 없이 작동합니다.

 

댓글

이 블로그의 인기 게시물

[문서] excel 체크박스 삭제

[DB] MySQL 백업 / 복원

[DB] MySQL 사용자(USER) 생성,삭제,권한부여 하기