mariadb 한글이 깨지는 원인을 알 수 있을까요? 채택완료
메이드
2년 전
조회 4,173
+----------------------------------+----------+
| mb_id | mb_state |
+----------------------------------+----------+
| ZDUxanFzVHpCY0RtMThSRnk5azBzdz09 | 정상 |
+----------------------------------+----------+
위와 같이 db에 입력이 되어 있습니다.
문제는 출력 시
한글이 ? 로 출력이 됩니다.
정상 => ?? 이렇게 출력이 되네요.
charset 은 utf8mb4 입니다.
["mb_state"]=> string(2) "??"
설정은 정상적으로 출력되는 다른 Database와 비교해 봤을 때 동일하게 되어 있어서.
도저히 원인을 모르겠네요.
댓글을 작성하려면 로그인이 필요합니다.
답변 3개
채택된 답변
+20 포인트
답변에 대한 댓글 4개
�
메이드
2년 전
s
sinbi
2년 전
DB에 정상적으로 들어있는데 PHP에서 그런 거면...
글자 출력 시 byte단위로 가공할 때 그런 현상 발생해요.
한글,영문,숫자마다 byte 할당 단위가 다 다르잖아요.
한글이면, mb_ 접두어 들어간 함수로 가공해보세요.
글자 출력 시 byte단위로 가공할 때 그런 현상 발생해요.
한글,영문,숫자마다 byte 할당 단위가 다 다르잖아요.
한글이면, mb_ 접두어 들어간 함수로 가공해보세요.
�
메이드
2년 전
문자열을 별도로 가공하는 거 없이
그냥 DB에서 불러온 값을 찍어도 ?? 로 나옵니다.
array(60) {
["mb_no"]=>
int(1)
["mb_id"]=>
string(32) "ZDUxanFzVHpCY0RtMThSRnk5azBzdz09"
["mb_recommend"]=>
NULL
["mb_datetime"]=>
string(19) "2023-10-27 00:35:00"
["mb_modified"]=>
string(19) "2023-10-27 00:35:00"
["mb_lastlogin_date"]=>
string(19) "2023-10-27 00:35:00"
["mb_login_ip"]=>
NULL
["mb_agree"]=>
NULL
["mb_state"]=>
string(2) "??"
그냥 DB에서 불러온 값을 찍어도 ?? 로 나옵니다.
array(60) {
["mb_no"]=>
int(1)
["mb_id"]=>
string(32) "ZDUxanFzVHpCY0RtMThSRnk5azBzdz09"
["mb_recommend"]=>
NULL
["mb_datetime"]=>
string(19) "2023-10-27 00:35:00"
["mb_modified"]=>
string(19) "2023-10-27 00:35:00"
["mb_lastlogin_date"]=>
string(19) "2023-10-27 00:35:00"
["mb_login_ip"]=>
NULL
["mb_agree"]=>
NULL
["mb_state"]=>
string(2) "??"
s
sinbi
2년 전
파일이 UTF-8 인코딩인지 체크해 보세요.
ps. ChatGPT가 이런 답변을 주네요. 참고해 보세요.
PHP에서 데이터베이스로부터 한글 데이터를 가져와 변수에 담은 후, var_dump()로 출력했을 때 "?"이 보이는 경우 주로 두 가지 이유로 발생할 수 있습니다:
1. PHP 파일 인코딩 설정:
PHP 파일의 인코딩이 UTF-8이 아니라면, PHP에서 데이터를 가져오는 과정에서 문자가 올바르게 해석되지 않을 수 있습니다. PHP 파일의 인코딩을 UTF-8로 설정해보세요:
header('Content-Type: text/html; charset=utf-8');
2. 데이터베이스 커넥션 인코딩 설정:
데이터베이스와의 연결에서도 문자 인코딩 설정이 중요합니다. MySQL 데이터베이스에 연결할 때, 다음과 같이 커넥션 문자 인코딩을 UTF-8로 설정해야 합니다:
$pdo = new PDO("mysql:host=localhost;dbname=mydatabase;charset=utf8", $username, $password);
또는 MySQLi를 사용할 경우:
$mysqli = new mysqli("localhost", "username", "password", "mydatabase");
$mysqli->set_charset("utf8");
이렇게 설정해야 데이터베이스에서 가져온 데이터가 올바른 문자 인코딩으로 PHP 변수에 저장됩니다. 이 설정들을 확인하고 조정하여 데이터를 올바르게 가져와 var_dump()로 출력하면 한글이 깨지지 않고 나타날 것입니다.
ps. ChatGPT가 이런 답변을 주네요. 참고해 보세요.
PHP에서 데이터베이스로부터 한글 데이터를 가져와 변수에 담은 후, var_dump()로 출력했을 때 "?"이 보이는 경우 주로 두 가지 이유로 발생할 수 있습니다:
1. PHP 파일 인코딩 설정:
PHP 파일의 인코딩이 UTF-8이 아니라면, PHP에서 데이터를 가져오는 과정에서 문자가 올바르게 해석되지 않을 수 있습니다. PHP 파일의 인코딩을 UTF-8로 설정해보세요:
header('Content-Type: text/html; charset=utf-8');
2. 데이터베이스 커넥션 인코딩 설정:
데이터베이스와의 연결에서도 문자 인코딩 설정이 중요합니다. MySQL 데이터베이스에 연결할 때, 다음과 같이 커넥션 문자 인코딩을 UTF-8로 설정해야 합니다:
$pdo = new PDO("mysql:host=localhost;dbname=mydatabase;charset=utf8", $username, $password);
또는 MySQLi를 사용할 경우:
$mysqli = new mysqli("localhost", "username", "password", "mydatabase");
$mysqli->set_charset("utf8");
이렇게 설정해야 데이터베이스에서 가져온 데이터가 올바른 문자 인코딩으로 PHP 변수에 저장됩니다. 이 설정들을 확인하고 조정하여 데이터를 올바르게 가져와 var_dump()로 출력하면 한글이 깨지지 않고 나타날 것입니다.
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
다만, php에서 출력할 때 ? 로 출력이 되는데
다른 DATABASE와 설정도 비교해 보고, 문자셋도 확인해 보고 해봤는데
원인을 알 수가 없네요;;