티스토리 뷰
외주 받아 일하고 있는 곳 레거시 시스템이 PHP. 어느날 이유도 모르게 한글이 물음표로 떠서 검색했는데 생각보다 해결하는데 애먹어서 이력을 기록.
해결
$conn = mysqli_connect($host,$user,$pwd,$db);
mysqli_set_charset($conn, "utf8"); // 추가
이력
멀쩡하던 것이 왜 문제가 생겼나, 누군가 인코딩 항목을 바꿨는지 싶어, phpMyAdmin 들어가서 이것저것 다 만져보고 찾아도 봤는데 문제가 있을 법한 항목을 찾지 못함. db는 잘못이 없다는 생각이 듦.
php <--> db 간 문제 일것으로 생각을 바꾸고 아래의 쿼리로 인코딩 상태를 알아보니, server 항목이 latin1
SHOW VARIABLES LIKE "%character%";
SHOW VARIABLES LIKE "%collation%";
SET SESSION character_set_server=utf8; 쿼리를 날려보니, 세션이 유지되는 동안에는 utf8로 유지되길래 기존에 있던 mysqli_query("set names utf8"); 에 위의 쿼리를 넣어 페이지를 다시 로딩.
mysqli_query("set names utf8");
mysqli_query("SET SESSION character_set_server=utf8"); // 추가
변화없음.
이후 해결란의 코드 한줄을 추가해 해결됨.
환경
Qnap 4.1.3
MariaDB 5.5.44
댓글