MySQL 8.4 版本注意事項
範例 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 標準執行)。