mariadb 한글이 깨지는 원인을 알 수 있을까요? 채택완료
+----------------------------------+----------+ | mb_id | mb_state | +----------------------------------+----------+ | ZDUxanFzVHpCY0RtMThSRnk5azBzdz09 | 정상 | +----------------------------------+----------+
위와 같이 db에 입력이 되어 있습니다.
문제는 출력 시
한글이 ? 로 출력이 됩니다.
정상 => ?? 이렇게 출력이 되네요.
charset 은 utf8mb4 입니다.
["mb_state"]=> string(2) "??"
설정은 정상적으로 출력되는 다른 Database와 비교해 봤을 때 동일하게 되어 있어서.
도저히 원인을 모르겠네요.
답변 3개
답변에 대한 댓글 4개
글자 출력 시 byte단위로 가공할 때 그런 현상 발생해요.
한글,영문,숫자마다 byte 할당 단위가 다 다르잖아요.
한글이면, mb_ 접두어 들어간 함수로 가공해보세요.
그냥 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) "??"
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에서 문자열 인코딩을 명시적으로 변환해 보세요
</p>
<p>$utf8_encoded_string = iconv("UTF-8", "UTF-8//IGNORE", $your_data);
echo $utf8_encoded_string;
답변에 대한 댓글 1개
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
다만, php에서 출력할 때 ? 로 출력이 되는데
다른 DATABASE와 설정도 비교해 보고, 문자셋도 확인해 보고 해봤는데
원인을 알 수가 없네요;;