はじめに

SQLの実行時に、「全角・半角」を区別するかどうかは、データベース毎に動作が異なります。Verticaは、デフォルトでは「全角・半角」を区別して扱うため、お客様からは想定した結果が得られないといったご相談をいただくことがあります。

本記事では、localeを使用し「全角・半角」を区別しない方法をご紹介します。

localeとは

localeとは、ユーザの言語や国、照合順序などの特殊な設定を指定するものであり、Verticaでは文字列関数の動作やSQLコマンドの順序付け(例:ORDER BY)などに使用されます。

localeの詳細は、以下のマニュアルをご参照ください。
Implement locales for international data sets

「全角・半角」を区別しない方法

デフォルトのlocaleは、en_USが設定されています。localeにja_JPを設定すると「全角・半角」が区別されません。

localeの設定方法

セッションレベルで設定する場合

セッションレベルのlocalは、vsqlやクライアントドライバのパラメータを変更することで設定できます。変更は実行セッションにて、即時反映されます。

vsqlの設定例

vsqlの場合は、「SET LOCALE TO」あるいは「\locale」で設定します。

「SET LOCALE TO」を使用した方法


「\locale」を使用した方法

クライアントドライバの設定例

ODBC、JDBC、ADO.NET のlocaleを設定する方法は、以下のマニュアルをご参照ください。

Setting the locale and encoding for ODBC sessions
Setting the locale for JDBC sessions
Setting the locale for ADO.NET sessions


ODBC データソースをご利用の場合は、「Server Settings」→「Locale」から設定できます。

DBレベルで設定する場合

DBレベルのlocalは、「DefaultSessionLocale」パラメータを変更することで設定できます。変更は設定後の新規セッションから反映され、実行セッションには設定が反映されません。

localeを変更した場合の実行例

localeをja_JPに設定した場合の例を解説します。例では、「全角・半角」が含まれたtest_a表を使用します。


セッションレベルでlocaleをja_JPに設定し、selectを実行した例です。ja_JPでは、「全角・半角」を区別しないため、検索条件を「AAA」(半角)とした場合は「AAA」(半角)、「AAA」(全角)が選択されます。


補足

本記事のlocaleとilike演算子を併用することで「全角・半角」と「大文字・小文字」の両方を区別せずに検索することも可能です。「大文字・小文字」を区別しない方法もご覧ください。

 「大文字・小文字」を区別しない方法
 http://vertica-tech.ashisuto.co.jp/nodistinction_upper_lower/

参考情報

Override the Default Locale for a Session
Specify the Default Locale for the Database

検証バージョンについて

この記事の内容は、Vertica 12.0で確認しています。

更新履歴

2023/08/22 本記事を公開