Mariadb

我可以在 MariaDB 中設置基於 IETF 語言標籤的排序規則嗎?

  • August 31, 2021

我有一個應用程序,每個使用者帳戶都可以設置他們首選的應用程序語言。我將這些語言首選項儲存為IETF BCP47 語言標籤(例如“de”、“en-US”)。現在,對於該使用者的查詢,我想根據他們的語言偏好對結果進行排序。

想像一下,我在一個帶有 utf8mb4_general_ci 排序規則的表中擁有數據 AAA、TTT、OOO、ÖÖÖ。

如果我想讓它們為德國使用者排序,我可以這樣做

SELECT word FROM `words` order by word collate utf8mb4_german2_ci

這會給我命令

AAA, ÖÖÖ, OOO, TTT

然而,對於冰島使用者,使用utf8mb4_icelandic_ci我會正確得到的排序規則

AAA、OOO、TTT、ÖÖÖ

現在,在我的應用程序中,我不為該使用者保存utf8mb4_icelandic_cior ,但我保存or 。utf8mb4_german2_ci``is``de-DE

有沒有辦法可以將此isde-DEBCP47 語言標籤直接發送到 MariaDB 以指定排序規則而不是排序規則名稱?或者我是否必須在我的應用程序中的語言標記和排序規則名稱之間進行映射才能為使用者發送正確的排序規則資訊?

(沒有直接的方法來做你假設的事情。)

建構一個以“de”為參數並構造和執行的儲存過程

SELECT word FROM `words` order by word collate utf8mb4_german2_ci

它可能涉及一個相對靜態的查找表,將“de”和“de-DE”映射到“utf8mb4_german2_ci”等。

請參閱有關定義儲存過程以及如何使用的文件CONCAT()PREPARE等等EXECUTE

執行SHOW COLLATION LIKE 'utf8mb4%';以查看哪些排序規則可用。(它因 MySQL/MariaDB 版本而異。)

引用自:https://dba.stackexchange.com/questions/298775