[php] PDO와 데이터베이스 문자 인코딩 설정

PHP의 PDO (PHP Data Objects)를 사용하여 데이터베이스에 연결할 때 올바른 문자 인코딩 설정은 매우 중요합니다. 문자 인코딩이 올바르게 설정되지 않으면 데이터베이스에 저장된 텍스트가 깨져서 표시될 수 있습니다.

PDO를 사용하여 MySQL 데이터베이스에 연결하는 방법

PHP에서 MySQL 데이터베이스에 PDO를 사용하여 연결하는 예제 코드는 다음과 같습니다.

<?php
$host = 'localhost';
$dbname = 'my_database';
$username = 'my_username';
$password = 'my_password';

$dsn = "mysql:host=$host;dbname=$dbname;charset=utf8mb4";
$options = [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_EMULATE_PREPARES => false,
];

try {
    $pdo = new PDO($dsn, $username, $password, $options);
} catch (PDOException $e) {
    throw new PDOException($e->getMessage(), (int)$e->getCode());
}
?>

PDO에서 데이터베이스 문자 인코딩 설정

위의 코드에서 charset=utf8mb4를 DSN (Data Source Name)에 추가하여 문자 인코딩을 설정합니다. utf8mb4는 UTF-8 인코딩을 사용하며, 4바이트 문자를 지원하여 이모지나 특수 문자를 포함한 모든 유니코드 문자를 처리할 수 있습니다.

데이터베이스와 테이블의 문자 인코딩 설정

데이터베이스 및 테이블의 문자 세트 및 인코딩을 설정하려면 다음 SQL 문을 사용할 수 있습니다.

CREATE DATABASE my_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

또는 이미 존재하는 데이터베이스의 문자 인코딩을 변경하려면 다음과 같이 합니다.

ALTER DATABASE my_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

데이터베이스의 문자 인코딩을 지정하면 해당 데이터베이스에 새로운 테이블이 생성될 때 자동으로 지정된 문자 세트 및 인코딩이 사용됩니다.

마무리

PHP의 PDO를 사용하여 MySQL 데이터베이스에 연결할 때 문자 인코딩을 올바르게 설정하는 것은 중요합니다. 올바른 문자 인코딩을 설정하면 데이터베이스에서 가져온 데이터가 정확하게 표시되며 깨지는 현상을 방지할 수 있습니다.

매번 일일이 설정할 필요 없이 PDO를 통해 문자 인코딩을 지정하면 데이터베이스와의 상호 작용이 보다 안정적으로 이루어질 수 있습니다.

참고 자료