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


MySQL 8.4 參考手冊  /  ...  /  函式結果的字元集與校對

14.8.3 函式結果的字元集與校對

MySQL 有許多傳回字串的運算子和函式。本節解答以下問題:此類字串的字元集和校對是什麼?

對於接受字串輸入並傳回字串結果作為輸出的簡單函式,輸出的字元集和校對與主要輸入值相同。例如,UPPER(X) 傳回與 X 具有相同字元字串和校對的字串。相同的規則適用於 INSTR()LCASE()LOWER()LTRIM()MID()REPEAT()REPLACE()REVERSE()RIGHT()RPAD()RTRIM()SOUNDEX()SUBSTRING()TRIM()UCASE()UPPER()

注意

與所有其他函式不同,REPLACE() 函式總是忽略字串輸入的校對,並執行區分大小寫的比較。

如果字串輸入或函式結果為二進位字串,則該字串具有 binary 字元集和校對。可以使用 CHARSET()COLLATION() 函式檢查這一點,這兩個函式都會為二進位字串引數傳回 binary

mysql> SELECT CHARSET(BINARY 'a'), COLLATION(BINARY 'a');
+---------------------+-----------------------+
| CHARSET(BINARY 'a') | COLLATION(BINARY 'a') |
+---------------------+-----------------------+
| binary              | binary                |
+---------------------+-----------------------+

對於合併多個字串輸入並傳回單個字串輸出的操作,標準 SQL 的彙總規則適用於決定結果的校對

  • 如果出現明確的 COLLATE Y,則使用 Y

  • 如果出現明確的 COLLATE YCOLLATE Z,則引發錯誤。

  • 否則,如果所有校對都是 Y,則使用 Y

  • 否則,結果沒有校對。

例如,使用 CASE ... WHEN a THEN b WHEN b THEN c COLLATE X END,產生的校對為 X。相同的規則適用於 UNION||CONCAT()ELT()GREATEST()IF()LEAST()

對於轉換為字元資料的操作,操作產生的字串的字元集和定序由 character_set_connectioncollation_connection 系統變數定義,這些變數決定預設的連線字元集和定序(請參閱第 12.4 節「連線字元集和定序」)。這僅適用於 BIN_TO_UUID()CAST()CONV()FORMAT()HEX()SPACE()

虛擬產生欄位的表示式是上述原則的例外。在這些表示式中,無論連線字元集為何,表格字元集都用於 BIN_TO_UUID()CONV()HEX() 的結果。

如果對於字串函數傳回結果的字元集或定序有任何疑問,請使用 CHARSET()COLLATION() 函數來查詢。

mysql> SELECT USER(), CHARSET(USER()), COLLATION(USER());
+----------------+-----------------+--------------------+
| USER()         | CHARSET(USER()) | COLLATION(USER())  |
+----------------+-----------------+--------------------+
| test@localhost | utf8mb3         | utf8mb3_general_ci |
+----------------+-----------------+--------------------+
mysql> SELECT CHARSET(COMPRESS('abc')), COLLATION(COMPRESS('abc'));
+--------------------------+----------------------------+
| CHARSET(COMPRESS('abc')) | COLLATION(COMPRESS('abc')) |
+--------------------------+----------------------------+
| binary                   | binary                     |
+--------------------------+----------------------------+