非系统区域设置

下载 PHP 驱动程序

本部分仅适用于 Linux 和 macOS 用户,尤其是在其 php 应用程序中处理多个区域设置的用户。

默认情况下,Microsoft Drivers for PHP for SQL Server 采用系统中定义的 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 驱动程序,则不建议为这两个驱动程序设置不同的选项。