資料儲存和訪問

本主題專門討論了 UTF-8 以及將其與資料庫一起使用的注意事項。如果你想了解有關在 PHP 中使用資料庫的更多資訊,請檢視此主題

在 MySQL 資料庫中儲存資料:

  • 在資料庫的所有表和文字列上指定 utf8mb4 字符集。這使得 MySQL 物理儲存和檢索以 UTF-8 本地編碼的值。

    如果指定了 utf8mb4_*排序規則,MySQL 將隱式使用 utf8mb4 編碼(沒有任何顯式字符集)。

  • 較舊版本的 MySQL(<5.5.3)不支援 utf8mb4,因此你將被迫使用 utf8,它僅支援 Unicode 字元的子集。

訪問 MySQL 資料庫中的資料:

  • 在你的應用程式程式碼(例如 PHP)中,無論你使用何種資料庫訪問方法,都需要將連線字符集設定為 utf8mb4。這樣,當 MySQL 將資料移交給你的應用程式時,MySQL 不會從其原生 UTF-8 進行轉換,反之亦然。

  • 一些驅動程式提供了自己的配置連線字符集的機制,它們都更新自己的內部狀態,並通知 MySQL 要在連線上使用的編碼。這通常是首選方法。

    例如(關於 utf8mb4 / utf8 的相同考慮如上所述):

    • 如果你使用 PHP≥5.3.6 的 PDO 抽象層,則可以在 DSN 中指定 charset

      $handle = new PDO('mysql:charset=utf8mb4');
      
    • 如果你使用的是 mysqli ,可以撥打 set_charset()

      $conn = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');
      
      $conn->set_charset('utf8mb4');        // object oriented style
      mysqli_set_charset($conn, 'utf8mb4'); // procedural style
      
    • 如果你遇到普通的 mysql 但碰巧執行 PHP≥5.2.3 ,則可以呼叫 mysql_set_charset

      $conn = mysql_connect('localhost', 'my_user', 'my_password');
      
      $conn->set_charset('utf8mb4');       // object oriented style
      mysql_set_charset($conn, 'utf8mb4'); // procedural style
      
    • 如果資料庫驅動程式沒有提供自己的設定連線字符集的機制,則可能必須發出一個查詢來告訴 MySQL 應用程式如何期望對連線上的資料進行編碼: SET NAMES 'utf8mb4'