mysqli에서 인코딩 설정

데이터베이스에서 PHP가 자료를 가져올 때 이해하는 인코딩을 설정해줘야 하는 듯하다.

DB에 UTF8로 데이터가 저장돼있다고 가정하자. DB에 접속한 뒤 PHP에서 인코딩 설정을 해 주지 않으면 PHP는 DB에 입력된 자료가 latin1이라고 이해한다.(PHP Version 5.2.6 이다.)

따라서 PHP한테 말해줘야 한다. “네가 가져온 데이터는 UTF8로 돼있는 거야!” 하고 말이다.

코드는 다음과 같다.

$db = new mysqli('localhost','DB아이디','DB비밀번호','DB이름');
if(mysqli_connect_errno()){
	echo "error 났음!";
	//여기엔 당연히 에러 났을 때 처리를 적어 줘야 할 것이다. 지금은 생략한다.
}
//여기부터가 인코딩 세팅 부분이다. 코드는 PHP홈페이지에서 가져와 사용했다.
//주의할 점은 utf-8이 아니라 utf8로 적어야 한다는 점이다.(euc-kr도 euckr로 적어야 합니다.)
if (!$db->set_charset("utf8")) {
	printf("utf8 문자 세트를 가져오다가 에러가 났습니다 : %s\n", $db->error);
} else {
	printf("현재 문자 세트 : %s\n", $db->character_set_name());
	//위 코드를 분석해 보면 알겠지만, character_set_name()은 PHP가 DB 인코딩을 뭘로 이해하고 있는지 가져오는 메서드다.
}

이렇게 하면 깔끔하게 가져올 수 있다.

참고 : http://www.php.net/manual/kr/mysqli.set-charset.php

참고로 구형 코드는 아래와 같다.

@mysql_query("set names UTF8");

👇 카테고리 글 목록

대표글

“mysqli에서 인코딩 설정”에 대한 4개의 응답

  1. 작업 중인 모 사이트가 갑자기 다운되는 현상이 발생했다. 원인은 MySQL DB connect 숫가가 꽉 차서 연결이 안되서였다.(max_connections) 급하게 MySQL Daemon을 restart해서 다시 정상이 되기는 했지만 문제를 찾아야 했다. DB를 확인해 보니 1천만 row 가까운 테이블이 존재했고, 별다른 인덱스가 걸려있지 않았다. Slow Query Log와 해당 테이블을 사용하는 웹프로그램을 뒤져서 해당 테이블을 다른 테이블과..

  2. syslog-ng 와 데이타베이스개념은 시스로그 메시지가 날라 오면 filter 키워드에 의하여 걸러진 시스로그는 templete 에 의하여 MySQL 의 쿼리를 실행하게 되는데 실행시 쿼리를 이용하여 적절하게 메시지를 분석하고 그에 맞는 처리를 합니다. 그리고 난후 log에 의하여 destination이결정 되게..

  3. 위 강좌내용 때문에 한글깨짐 해결했습니다.
    감사합니다.

    즐겨찾기에 등록하고 많이 배우도록 하겠습니다. ^^

    1. 해결하셨다니 다행이네요. ^^ 제가 정리한 것을 보고 누군가 문제를 해결했다는 댓글을 보니 정말 기쁘네요.

댓글 남기기