# PHP PDO如何設置UTF8
在使用PHP的PDO擴展連接數據庫時,正確處理字符編碼(尤其是UTF-8)是避免亂碼問題的關鍵。以下是幾種設置UTF-8編碼的常用方法:
## 方法一:通過DSN參數設置
在PDO連接字符串(DSN)中直接指定字符集:
```php
$dsn = 'mysql:host=localhost;dbname=test;charset=utf8mb4';
$pdo = new PDO($dsn, 'username', 'password');
注意:MySQL建議使用
utf8mb4
而非utf8
,以支持完整的Unicode字符(如emoji)
創建PDO實例后通過setAttribute
方法設置:
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
$pdo->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, 'SET NAMES utf8mb4');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
連接后立即執行SET NAMES語句:
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
$pdo->exec('SET NAMES utf8mb4');
try {
$dsn = 'mysql:host=localhost;dbname=test;charset=utf8mb4';
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
];
$pdo = new PDO($dsn, 'username', 'password', $options);
// 驗證字符集
$charset = $pdo->query('SHOW VARIABLES LIKE "character_set_client"')->fetch();
echo '當前字符集:' . $charset['Value'];
} catch (PDOException $e) {
die('數據庫連接失?。?#39; . $e->getMessage());
}
不同數據庫的字符集設置方式可能不同:
charset=utf8mb4
options='--client_encoding=UTF8'
確保三處編碼一致:
對于HTML輸出,還需設置:
header('Content-Type: text/html; charset=utf-8');
通過以上設置,可以確保從數據庫存儲到前端展示全程使用UTF-8編碼,避免亂碼問題。 “`
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。