插件窝 干货文章 PHP PDO连接数据库:如何正确设置字符集?

PHP PDO连接数据库:如何正确设置字符集?

字符集 设置 PDO username 363    来源:    2025-03-15

在使用PHP的PDO扩展连接数据库时,正确设置字符集非常重要,尤其是在处理多语言数据时。字符集的设置可以确保数据在存储和检索时不会出现乱码问题。

1. 在DSN中设置字符集

在创建PDO连接时,可以通过DSN(数据源名称)来设置字符集。常见的字符集是utf8utf8mb4(支持更广泛的Unicode字符,如表情符号)。

$dsn = 'mysql:host=your_host;dbname=your_dbname;charset=utf8mb4';
$username = 'your_username';
$password = 'your_password';

try {
    $pdo = new PDO($dsn, $username, $password);
    // 设置PDO错误模式为异常
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

2. 在连接后设置字符集

如果你不想在DSN中设置字符集,也可以在连接后通过执行SQL语句来设置字符集。

$dsn = 'mysql:host=your_host;dbname=your_dbname';
$username = 'your_username';
$password = 'your_password';

try {
    $pdo = new PDO($dsn, $username, $password);
    // 设置PDO错误模式为异常
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // 设置字符集
    $pdo->exec("SET NAMES 'utf8mb4'");
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

3. 设置客户端字符集

在某些情况下,你可能还需要设置客户端字符集,以确保客户端与服务器之间的通信使用正确的字符集。

$dsn = 'mysql:host=your_host;dbname=your_dbname';
$username = 'your_username';
$password = 'your_password';

try {
    $pdo = new PDO($dsn, $username, $password);
    // 设置PDO错误模式为异常
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // 设置客户端字符集
    $pdo->exec("SET CHARACTER SET utf8mb4");
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

4. 注意事项

  • utf8mb4:如果你需要存储表情符号或其他4字节的Unicode字符,建议使用utf8mb4字符集。utf8只支持最多3字节的字符。
  • 数据库和表的字符集:确保数据库和表的字符集也设置为utf8mb4,以保持一致性。

5. 检查字符集

你可以通过以下SQL语句来检查当前数据库、表和连接的字符集:

SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';

通过这些步骤,你可以确保PHP PDO连接数据库时正确设置字符集,避免数据存储和检索时出现乱码问题。