文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  字元集、校對、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" />