[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 클라이언트가 알아듣지 못해서" 발생합니다. MySQL 8.0+ / Aurora v3+의 변화 : MySQL 8.0 버전부터 기본 문자셋(Default Character Set)이 기존 utf8 에서 이모지까지 완벽 지원하는 utf8mb4 로 변경되었습니다. 이때 서버가 클라이언트에 전달하는 문자셋 인덱스 번호가 255 번입니다. 구형 PHP 클라이언트 라이브러리의 한계 : 서버에 접속하는 PHP 환경이 다소 오래되었거나(PHP 7.2 이하 등), 내부의 php-mysqlnd 라이브러리가 구버전일 경우 이 255 번( utf8mb4 )이라는 문자셋의 존재 자체를 인지하지 못합니다. 결과 : PHP가 "서버가 보낸 255번 문자셋이 뭔지 모르겠어!"라며 연결을 거부하고 ...