본문 바로가기
Study/Database

mysql 한글 깨질때

by Answer Choi 2016. 8. 10.
반응형


php에서 한글데이터를 가져오거나 할때 한글이 깨지는 케이스가 크게 2가지가 있습니다.


첫번째 인코딩이 맞지 않을때!!


우선 php 설정이 한글로 되어 있어야 합니다. 


보통 collationutf8_general_ci 으로 설정해 주면 됩니다.



설정후 한글 데이터를 입력하면 php내에서 한글이 깨지지 않습니다.


그리고 쿼리를 실행합니다.


json으로 print 했더니 위와 같이 한글이 깨져서 나옵니다.


1
2
3
4
5
6
7
8
9
10
11
12
$con = mysql_connect($host,$uname,$pwd) or die("connection failed");
mysql_select_db($db,$con) or die("db selection failed");
 
mysql_query("set session character_set_connection=utf8;"); 
mysql_query("set session character_set_results=utf8;"); 
mysql_query("set session character_set_client=utf8;"); 
 
        
$r=mysql_query("select * from intro",$con);
$row=mysql_fetch_array($r );
print(json_encode($row);
mysql_close($con);
cs


php안에 mysql connect 아래에 위 코드의 Line4~6을 복사해 주세요.


실행을 해보면 위와 같이 출력되는데 아까처럼 깨진건 아니고, decoding이 안된 상태입니다.


이 경우 unescape를 해줘야 합니다.


두번째 UNESCAPE 


1
2
3
4
5
6
7
8
9
10
11
12
$con = mysql_connect($host,$uname,$pwd) or die("connection failed");
mysql_select_db($db,$con) or die("db selection failed");
 
mysql_query("set session character_set_connection=utf8;"); 
mysql_query("set session character_set_results=utf8;"); 
mysql_query("set session character_set_client=utf8;"); 
 
        
$r=mysql_query("select * from intro",$con);
$row=mysql_fetch_array($r );
print(json_encode($row,JSON_UNESCAPED_UNICODE));
mysql_close($con);
cs


PHP에서는 UNESCAPE가 자동으로 되지않아 함수로 따로 만들어 주거나 해야합니다.


하지만 json_encode를 이용하면 Line 11과 같이 파라메터를 하나만 더 써주면 됩니다.


처음 mysql에 넣었던 것처럼 한글이 깨지지 않고, 그대로 출력되었습니다.

반응형

'Study > Database' 카테고리의 다른 글

SQL datetime 형식 주의점  (0) 2016.09.01
db 외부접속 안될때  (0) 2016.08.29
SQL (DATABASE) 명령어4-Having  (0) 2016.07.28
SQL (DATABASE) 명령어3-group by  (0) 2016.07.27
SQL (DATABASE) 명령어2-수식및 연산자  (0) 2016.07.26

인기글