このセクションは、Linux および macOS ユーザー、特に php アプリケーションで複数のロケールを扱うユーザーにのみ適用されます。
既定で Microsoft SQL Server 用 Drivers for PHP はシステムで定義された LC_ALL
環境変数を受け取り、他のすべての LC_xxx
カテゴリ (状況によっては $LANG
または $LANGUAGE
を除く) がオーバーライドされます。これは、桁区切り記号、小数点、文字セット、月、日の名前、エラー メッセージなどのアプリケーション メッセージ、通貨記号などに影響があります。
バージョン 5.8.0 以降では、次の例に示すように、ユーザーは php.ini ファイルを使用してローカライズ設定を構成できます。
SQLSRV ドライバーを使用してロケール情報を設定する
php.ini ファイルの最後に、次を追加します。
[sqlsrv]
sqlsrv.SetLocaleInfo = <option>
PDO_SQLSRV ドライバーを使用してロケール情報を設定する
php.ini ファイルの最後に、次を追加します。
[pdo_sqlsrv]
pdo_sqlsrv.set_locale_info = <option>
オプションは次の値のいずれかです。
オプション | 動作の説明 |
---|---|
0 | ドライバーでは、システム ロケール設定が無視されます。 |
1 | ドライバーによって LC_CTYPE 変数が読み取られます。 |
2 | ドライバーによって LC_ALL 変数が読み取られます (これが既定値です)。 |
LC_CTYPE
カテゴリによって、テキスト データ文字のバイト シーケンスの解釈、文字の分類、および文字クラスの動作を制御する文字処理ルールが決まります。 これで大文字、小文字、英字、英字以外の文字などの認識が制御されます。
説明
オプション 0 -- アプリケーション ロケールを変更しない場合にこれを使用します。
オプション 1 -- これを使用すると、他の
LC_xxx
カテゴリに影響を与えずに、LC_CTYPE
のシステム値のみが設定されます。オプション 2 --
LC_ALL
を使用すると、すべてのLC_xxx
カテゴリがオーバーライドされ、php アプリケーションとその拡張機能に影響が及びます。
php スクリプトのロケールがシステムのロケールと同じでない場合は、php 組み込み関数 setlocale を呼び出して、php スクリプトでロケールを指定する必要があります。
たとえば、システムの既定値が en_US.UTF-8
で、php スクリプトで de_DE.UTF-8
が使用されている場合は、php 関数 setlocale()
を適切に呼び出します。
オプション 2 の場合、LC_ALL
変数とは異なる場合にのみ、php スクリプトで目的のロケールを指定します。
Note
php.ini に何も定義されていない場合、現在の既定では、LC_ALL
に基づいて他のすべてのロケール設定がオーバーライドされます。これは非推奨になります。 近い将来、既定ではシステム ロケール設定が無視されます。 そのため、現在の動作を維持する場合は、そのために php.ini ファイルを変更する必要があります。
sqlsrv と pdo_sqlsrv の両方のドライバーが有効な場合、2 つのドライバーに異なるオプションを設定することはお勧めしません。