MySQL中有許多操作符和函數可以返回字符串。本節回答這個問題:返回的字符串使用什麼字符集和 校對規則?
對於簡單的函數,即接收字符串輸入然後返回一個字符串結果作為輸出的函數,輸出的字符集和校對規則與原始輸入的相同。例如,UPPER(X)返回一個字符串,其字符和 校對規則與X相同。類似的函數還有INSTR()、LCASE()、LOWER()、LTRIM()、MID()、REPEAT()、REPLACE()、REVERSE()、RIGHT()、RPAD()、RTRIM()、SOUNDEX()、SUBSTRING()、TRIM()、UCASE()和UPPER()。(還需要注意:REPLACE()函數不同於其它函數,它總是忽略輸入字符串的 校對規則,並且進行大小寫不敏感的比較。)
對於合並多個字符串輸入並且返回單個字符串輸出的運算,應用標准SQL“聚合規則”:
· 如果存在顯式的校對規則X,那麼使用X。
· 如果存在顯式的校對規則X和Y,那麼產生一個錯誤。
· 否則,如果全部校對規則是X,那麼使用X。
· 其它情況,結果沒有校對規則。
例如,使用CASE ... WHEN a THEN b WHEN b THEN c COLLATE X END。結果校對規則是X。對於CASE、UNION、||、CONCAT()、ELT()、GREATEST()、IF()和LEAST()情況相同。
對於轉換為字符數據的運算,從運算得到的結果字符串的字符集和校對規則由character_set_connection和collation_connection系統變量定義。這適用於CAST()、CHAR()、CONV()、FORMAT()、HEX()和SPACE()函數。