MySQL 9.0 版本資訊
範例 1:排序德語變音符號
假設資料表 T
中的欄位 X
具有下列 latin1
欄位值
Muffler
Müller
MX Systems
MySQL
也假設使用下列陳述式擷取欄位值
SELECT X FROM T ORDER BY X COLLATE collation_name;
下表顯示如果我們使用不同校對的 ORDER BY
時,值的排序結果。
latin1_swedish_ci |
latin1_german1_ci |
latin1_german2_ci |
---|---|---|
Muffler | Muffler | Müller |
MX Systems | Müller | Muffler |
Müller | MX Systems | MX Systems |
MySQL | MySQL | MySQL |
在此範例中導致不同排序順序的字元是 ü
(德語 「U-變音符號」)。
範例 2:搜尋德語變音符號
假設您有三個僅因使用的字元集和校對而異的資料表
mysql> SET NAMES utf8mb4;
mysql> CREATE TABLE german1 (
c CHAR(10)
) CHARACTER SET latin1 COLLATE latin1_german1_ci;
mysql> CREATE TABLE german2 (
c CHAR(10)
) CHARACTER SET latin1 COLLATE latin1_german2_ci;
mysql> CREATE TABLE germanutf8 (
c CHAR(10)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
每個資料表包含兩筆記錄
mysql> INSERT INTO german1 VALUES ('Bar'), ('Bär');
mysql> INSERT INTO german2 VALUES ('Bar'), ('Bär');
mysql> INSERT INTO germanutf8 VALUES ('Bar'), ('Bär');
上述校對中有兩個具有 A = Ä
相等性,一個沒有此類相等性 (latin1_german2_ci
)。因此,比較會產生此處顯示的結果
mysql> SELECT * FROM german1 WHERE c = 'Bär';
+------+
| c |
+------+
| Bar |
| Bär |
+------+
mysql> SELECT * FROM german2 WHERE c = 'Bär';
+------+
| c |
+------+
| Bär |
+------+
mysql> SELECT * FROM germanutf8 WHERE c = 'Bär';
+------+
| c |
+------+
| Bar |
| Bär |
+------+
這不是錯誤,而是 latin1_german1_ci
和 utf8mb4_unicode_ci
排序屬性的結果 (顯示的排序是根據德國 DIN 5007 標準完成)。