對於使用預設 MySQL 字元集和排序規則 (utf8mb4
,utf8mb4_0900_ai_ci
) 儲存資料的應用程式,應該不需要特別的設定。如果應用程式需要使用不同的字元集或排序規則儲存資料,您可以使用幾種方式設定字元集資訊
為每個資料庫指定字元設定。例如,使用一個資料庫的應用程式可以使用
utf8mb4
的預設值,而使用另一個資料庫的應用程式可以使用sjis
。在伺服器啟動時指定字元設定。這會導致伺服器對所有未做其他安排的應用程式使用給定的設定。
如果您從原始碼建置 MySQL,則在設定時指定字元設定。這會導致伺服器將給定的設定用作所有應用程式的預設值,而無需在伺服器啟動時指定它們。
當不同的應用程式需要不同的字元設定時,每個資料庫的技術提供了很大的彈性。如果大多數或所有應用程式都使用相同的字元集,則在伺服器啟動或設定時指定字元設定可能最方便。
對於每個資料庫或伺服器啟動的技術,這些設定會控制資料儲存的字元集。應用程式也必須告知伺服器要使用哪個字元集進行客戶端/伺服器通訊,如下列說明所述。
此處顯示的範例假設在特定情況下使用 latin1
字元集和 latin1_swedish_ci
排序規則,以替代 utf8mb4
和 utf8mb4_0900_ai_ci
的預設值。
為每個資料庫指定字元設定。 若要建立一個資料庫,使其表格使用指定的預設字元集和排序規則進行資料儲存,請使用如下的
CREATE DATABASE
陳述式CREATE DATABASE mydb CHARACTER SET latin1 COLLATE latin1_swedish_ci;
在資料庫中建立的表格會預設將
latin1
和latin1_swedish_ci
用於任何字元欄位。使用資料庫的應用程式也應在每次連線時設定其與伺服器的連線。這可以在連線後執行
SET NAMES 'latin1'
陳述式來完成。無論使用何種連線方法 (例如 mysql 用戶端、PHP 指令碼等),都可以使用該陳述式。在某些情況下,可能會以其他方式設定連線以使用所需的字元集。例如,若要使用 mysql 連線,您可以指定
--default-character-set=latin1
命令列選項,以達到與SET NAMES 'latin1'
相同的效果。如需設定用戶端連線的詳細資訊,請參閱 第 12.4 節「連線字元集與排序規則」。
注意如果您使用
ALTER DATABASE
來變更資料庫的預設字元集或排序規則,則必須捨棄並重新建立資料庫中現有的儲存常式,使其使用新的預設值。(在儲存常式中,具有字元資料類型的變數會使用資料庫預設值,如果未明確指定字元集或排序規則。請參閱 第 15.1.17 節「CREATE PROCEDURE 和 CREATE FUNCTION 陳述式」。)在伺服器啟動時指定字元設定。 若要在伺服器啟動時選取字元集和排序規則,請使用
--character-set-server
和--collation-server
選項。例如,若要在選項檔案中指定這些選項,請包含下列行[mysqld] character-set-server=latin1 collation-server=latin1_swedish_ci
這些設定適用於伺服器範圍,並適用於任何應用程式建立的資料庫,以及在這些資料庫中建立的表格的預設值。
應用程式仍然需要在連線後使用
SET NAMES
或等效方式設定其連線,如先前所述。您可能會想使用--init_connect="SET NAMES 'latin1'"
選項啟動伺服器,以使每次連線的用戶端自動執行SET NAMES
。但是,這可能會產生不一致的結果,因為具有CONNECTION_ADMIN
權限 (或已棄用的SUPER
權限) 的使用者不會執行init_connect
值。在 MySQL 設定時指定字元設定。 若要從原始碼設定和建置 MySQL 時選擇字元集和校對規則,請使用
DEFAULT_CHARSET
和DEFAULT_COLLATION
CMake 選項。cmake . -DDEFAULT_CHARSET=latin1 \ -DDEFAULT_COLLATION=latin1_swedish_ci
產生的伺服器會使用
latin1
和latin1_swedish_ci
作為資料庫和資料表以及用戶端連線的預設值。不需要使用--character-set-server
和--collation-server
在伺服器啟動時指定這些預設值。應用程式也不需要在連線到伺服器後使用SET NAMES
或等效指令來設定其連線。
無論您如何設定應用程式使用的 MySQL 字元集,您也必須考慮這些應用程式執行的環境。例如,如果您打算使用從編輯器建立的檔案中取得的 UTF-8 文字傳送語句,您應該將環境的地區設定設定為 UTF-8 來編輯該檔案,以便檔案編碼正確,且作業系統可以正確處理它。如果您從終端機視窗中使用 mysql 用戶端,則必須將視窗設定為使用 UTF-8,否則字元可能無法正確顯示。對於在 Web 環境中執行的腳本,該腳本必須正確處理其與 MySQL 伺服器互動的字元編碼,並且必須產生正確指示編碼的頁面,以便瀏覽器知道如何顯示頁面內容。例如,您可以在您的 <head>
元素中包含此 <meta>
標籤。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />