資料儲存和訪問
本主題專門討論了 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'
。
-