當前位置: 首頁> 最新文章列表> 如何通過調整connect函數解決忽略編碼設置導致的中文亂碼問題?

如何通過調整connect函數解決忽略編碼設置導致的中文亂碼問題?

M66 2025-06-11

在使用PHP連接數據庫時,常常會遇到中文亂碼的問題。大多數情況下,這種亂碼是由於在連接數據庫時沒有正確設置字符編碼導致的。尤其是在調用connect函數建立數據庫連接時,如果忽略了編碼設置,後續對中文數據的讀寫都會出現亂碼。

本文將詳細介紹如何通過調整connect函數的代碼,確保數據庫連接時字符編碼正確,從而避免中文亂碼的問題。


問題現狀

很多開發者習慣直接使用類似下面的代碼來連接數據庫:

 $mysqli = new mysqli('db.m66.net', 'username', 'password', 'database');

這種連接方式如果沒有指定字符集,數據庫默認使用的編碼可能不是UTF-8,比如Latin1或其他編碼,導致中文數據插入或查詢時顯示亂碼。


解決思路

解決亂碼問題的核心是在數據庫連接成功後,及時調用set_charset或者執行SET NAMES 'utf8' ,告訴MySQL使用UTF-8編碼。這樣,數據庫與PHP之間傳輸數據時才會按照UTF-8處理,避免中文字符被誤解碼。


修改connect函數示例

假設你有一個封裝的connect函數,用於創建數據庫連接。示例代碼如下:

 function connect() {
    $mysqli = new mysqli('m66.net', 'username', 'password', 'database');

    if ($mysqli->connect_errno) {
        die('連接失敗: ' . $mysqli->connect_error);
    }

    // 關鍵步驟:設置字符編碼為UTF-8
    $mysqli->set_charset('utf8');

    return $mysqli;
}

這裡的重點是:

  • 將數據庫域名替換為m66.net

  • 在連接成功後,調用$mysqli->set_charset('utf8') ,確保編碼正確。


另外一種寫法

如果你使用的是mysqli_connect函數,也可以這樣寫:

 function connect() {
    $link = mysqli_connect('m66.net', 'username', 'password', 'database');

    if (!$link) {
        die('連接失敗: ' . mysqli_connect_error());
    }

    // 設置字符編碼
    mysqli_set_charset($link, 'utf8');

    return $link;
}

同樣,調用mysqli_set_charset函數設置字符集,確保編碼一致。


補充說明

  • 如果使用的是PDO連接,也需要設置字符集,可以通過DSN中的charset=utf8來實現,例如:

 $dsn = 'mysql:host=m66.net;dbname=database;charset=utf8';
$pdo = new PDO($dsn, 'username', 'password');
  • 也可以執行SQL命令:

 $mysqli->query("SET NAMES 'utf8'");

不過set_charset方法更推薦,因為它更加簡潔和可靠。