文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美國信紙尺寸) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  字元集、排序規則、Unicode  /  設定應用程式字元集與排序規則

12.5 設定應用程式字元集與排序規則

對於使用預設 MySQL 字元集和排序規則 (utf8mb4utf8mb4_0900_ai_ci) 儲存資料的應用程式,應該不需要特別的設定。如果應用程式需要使用不同的字元集或排序規則儲存資料,您可以使用幾種方式設定字元集資訊

  • 為每個資料庫指定字元設定。例如,使用一個資料庫的應用程式可以使用 utf8mb4 的預設值,而使用另一個資料庫的應用程式可以使用 sjis

  • 在伺服器啟動時指定字元設定。這會導致伺服器對所有未做其他安排的應用程式使用給定的設定。

  • 如果您從原始碼建置 MySQL,則在設定時指定字元設定。這會導致伺服器將給定的設定用作所有應用程式的預設值,而無需在伺服器啟動時指定它們。

當不同的應用程式需要不同的字元設定時,每個資料庫的技術提供了很大的彈性。如果大多數或所有應用程式都使用相同的字元集,則在伺服器啟動或設定時指定字元設定可能最方便。

對於每個資料庫或伺服器啟動的技術,這些設定會控制資料儲存的字元集。應用程式也必須告知伺服器要使用哪個字元集進行客戶端/伺服器通訊,如下列說明所述。

此處顯示的範例假設在特定情況下使用 latin1 字元集和 latin1_swedish_ci 排序規則,以替代 utf8mb4utf8mb4_0900_ai_ci 的預設值。

  • 為每個資料庫指定字元設定。 若要建立一個資料庫,使其表格使用指定的預設字元集和排序規則進行資料儲存,請使用如下的 CREATE DATABASE 陳述式

    CREATE DATABASE mydb
      CHARACTER SET latin1
      COLLATE latin1_swedish_ci;

    在資料庫中建立的表格會預設將 latin1latin1_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_CHARSETDEFAULT_COLLATION CMake 選項。

    cmake . -DDEFAULT_CHARSET=latin1 \
      -DDEFAULT_COLLATION=latin1_swedish_ci

    產生的伺服器會使用 latin1latin1_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" />