MySQL 8.4 版本資訊
以下範例顯示 MySQL 如何判斷預設字元集和校對規則值。
範例 1:資料表和資料行定義
CREATE TABLE t1
(
c1 CHAR(10) CHARACTER SET latin1 COLLATE latin1_german1_ci
) DEFAULT CHARACTER SET latin2 COLLATE latin2_bin;
這裡我們有一個具有 latin1
字元集和 latin1_german1_ci
校對規則的資料行。定義是明確的,因此很直接。請注意,在 latin2
資料表中儲存 latin1
資料行沒有問題。
範例 2:資料表和資料行定義
CREATE TABLE t1
(
c1 CHAR(10) CHARACTER SET latin1
) DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci;
這次我們有一個具有 latin1
字元集和預設校對規則的資料行。雖然看似很自然,但預設校對規則不是從資料表層級取得。相反地,由於 latin1
的預設校對規則永遠是 latin1_swedish_ci
,資料行 c1
的校對規則為 latin1_swedish_ci
(不是 latin1_danish_ci
)。
範例 3:資料表和資料行定義
CREATE TABLE t1
(
c1 CHAR(10)
) DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci;
我們有一個具有預設字元集和預設校對規則的資料行。在這種情況下,MySQL 會檢查資料表層級以判斷資料行的字元集和校對規則。因此,資料行 c1
的字元集為 latin1
,其校對規則為 latin1_danish_ci
。
範例 4:資料庫、資料表和資料行定義
CREATE DATABASE d1
DEFAULT CHARACTER SET latin2 COLLATE latin2_czech_cs;
USE d1;
CREATE TABLE t1
(
c1 CHAR(10)
);
我們建立一個資料行,未指定其字元集和校對規則。我們也未在資料表層級指定字元集和校對規則。在這種情況下,MySQL 會檢查資料庫層級以判斷資料表設定,然後這些設定會變成資料行設定。)因此,資料行 c1
的字元集為 latin2
,其校對規則為 latin2_czech_cs
。