非系統地區設定

下載 PHP 驅動程式

此節僅適用於 Linux 與 macOS 使用者,特別是在其 PHP 應用程式中處理多個地區設定的使用者。

根據預設,適用於 SQL Server 的 Microsoft 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 類別會決定字元處理規則,該類別管理文字資料字元位元組序列的解釋、字元分類,以及字元類別的行為。 它會控制大寫和小寫、字母和非字母字元等的辨識。

說明

  1. 選項 0 -- 當您不想要變更應用程式地區設定時,請使用此選項。

  2. 選項 1 -- 使用此選項僅設定 LC_CTYPE 的系統值,而不會影響其他 LC_xxx 類別。

  3. 選項 2 -- 使用 LC_ALL 覆寫所有 LC_xxx 類別,並影響 PHP 應用程式及其延伸模組。

如果任何 PHP 指令碼的地區設定與系統不同,您可能需要藉由呼叫 PHP 內建函式 setlocale,指定 PHP 指令碼中的地區設定。

例如,如果系統預設值是 en_US.UTF-8 但 PHP 指令碼使用 de_DE.UTF-8,則請適當地呼叫 PHP 函式 setlocale()

針對選項 2,只有在您的 PHP 指令碼與 LC_ALL 變數不同時,才會指出所需的地區設定。

注意

如果在 php.ini 中未定義任何內容,則目前的預設值是根據 LC_ALL 覆寫所有其他地區設定,而這將會淘汰。 在不久的將來,預設值是忽略系統地區設定。 因此,如果使用者想要保留目前的行為,則必須據以修改 php.ini 檔案。

如果 sqlsrv 和 pdo_sqlsrv 驅動程式都已啟用,則不建議為這兩個驅動程式設定不同的選項。