web-dev-qa-db-ja.com

PostgreSQLは特殊文字を翻訳しますか?

説明:

PostgreSQL 9.3

文字列:'ì ằ ú ề'

望ましい結果:'i a u e'

私のコード:

select translate ('ì ằ ú ề', 'ìằúề', 'iaue') ; -- it works. Result: i a u e

質問:

この方法で使用する場合、「ìằúề」と「iaue」の間の手動翻訳を定義する必要があります。より良い解決策はありますか?

参照: PGドキュメント

2
Luan Huynh

追加モジュールunaccent によって提供されるunaccent()を使用します。
詳細:

大幅な改善が行われましたPostgres 9.5 ::

  • 空の置換文字列をアクセントなしで許可(Mohammad Alhashash)

    これは、分音記号が別の文字として表される言語で役立ちます。

  • 複数文字のソース文字列をアクセントなしで許可する(Tom Lane)

    これは、分音記号が個別の文字として表される言語で役立ちます。また、より複雑でアクセントのない辞書も使用できます。

カスタムルール

(コメントしたように)デフォルトのルールを編集すると、更新(または自分でコンパイルした場合は新しいコンパイル)によって手動の変更が上書きされます。元の両方の編集したルールセットのバックアップをすぐに作成してください。

unaccent()関数はoverloaded です。シンプルなフォームはデフォルトの辞書'unaccent'を使用していますが、

SELECT unaccent('ì ằ ú ề');

2パラメータ形式の別の辞書を選択できます。

SELECT unaccent('my_dictionary', 'ì ằ ú ề');

ではなくデフォルトのルールセットを変更することを検討します( コメントのリンクで指示されているように )が、カスタム名でルールセットを追加でインストールします。これにより、すべての更新を自動的に受信するデフォルトの動作が維持され、代替/拡張ルールセットを適用するコードで明確に確認できます。 マニュアルの説明 に従うか、または このブログ を検討してください。

そして、関数が不変である必要があるインデックスまたはその他のコンテキストで使用するために、私の 上記のリンク を検討してください。

2