mariadb 한글이 깨지는 원인을 알 수 있을까요?

mariadb 한글이 깨지는 원인을 알 수 있을까요?

QA

mariadb 한글이 깨지는 원인을 알 수 있을까요?

답변 3

본문

+----------------------------------+----------+
| mb_id                            | mb_state |
+----------------------------------+----------+
| ZDUxanFzVHpCY0RtMThSRnk5azBzdz09 | 정상     |
+----------------------------------+----------+

 

위와 같이 db에 입력이 되어 있습니다.

문제는 출력 시 

한글이 ? 로 출력이 됩니다.

정상 => ?? 이렇게 출력이 되네요.

charset 은 utf8mb4 입니다.

 

["mb_state"]=>
  string(2) "??"

 

설정은 정상적으로 출력되는 다른 Database와 비교해 봤을 때 동일하게 되어 있어서.

도저히 원인을 모르겠네요.

 

 

이 질문에 댓글 쓰기 :

답변 3

phpmyadmin에서 출력해도 그런가요?

phpmyadmin 에서도 확인하면, DB에는 정상적으로 한글이 입력되어 있습니다.
다만, php에서 출력할 때 ? 로 출력이 되는데
다른 DATABASE와 설정도 비교해 보고, 문자셋도 확인해 보고 해봤는데
원인을 알 수가 없네요;;

DB에 정상적으로 들어있는데 PHP에서 그런 거면...
글자 출력 시 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) "??"

파일이 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()로 출력하면 한글이 깨지지 않고 나타날 것입니다.

가져온 데이터를 출력하기 전에 PHP에서 문자열 인코딩을 명시적으로 변환해 보세요


$utf8_encoded_string = iconv("UTF-8", "UTF-8//IGNORE", $your_data);
echo $utf8_encoded_string;
답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 1,543
© SIRSOFT
현재 페이지 제일 처음으로