我觉得 ibm_db2.i5_dbcs_alloc 的解释很难理解。
在 ibm_db2 扩展内部,如果 i5_dbcs_alloc 值为 1,则会分配字符串列长度的 6 倍。
分配的区域用于在 UTF-8 和 EBCDIC 字符编码之间进行转换。
根据 UTF-8 的定义,字母长度最多需要 6 个字节。
注意
对于长列,分配的大小可能会超过 DB2 中定义的上限,因为原始列的大小乘以了 6 倍。这可能会导致结果数据变为 null。
这些函数的行为受php.ini中的设置影响。
名称 | 默认值 | 可更改 | 变更日志 |
---|---|---|---|
ibm_db2.binmode | "1" | INI_ALL |
|
ibm_db2.i5_all_pconnect | "0" | INI_SYSTEM |
自 ibm_db2 1.6.5 起可用。 |
ibm_db2.i5_allow_commit | "0" | INI_SYSTEM |
自 ibm_db2 1.4.9 起可用。 |
ibm_db2.i5_blank_userid | "0" | INI_SYSTEM |
自 ibm_db2 1.9.7 起可用。 |
ibm_db2.i5_char_trim | "0" | INI_SYSTEM |
自 ibm_db2 2.1.0 起可用。 |
ibm_db2.i5_dbcs_alloc | "0" | INI_SYSTEM |
自 ibm_db2 1.5.0 起可用。 |
ibm_db2.i5_guard_profile | "0" | INI_SYSTEM |
自 ibm_db2 1.9.7 起可用。 |
ibm_db2.i5_ignore_userid | "0" | INI_SYSTEM |
自 ibm_db2 1.8.0 起可用。 |
ibm_db2.i5_job_sort | "0" | INI_SYSTEM |
自 ibm_db2 1.8.4 起可用。 |
ibm_db2.i5_log_verbose | "0" | INI_SYSTEM |
自 ibm_db2 1.9.7 起可用。 |
ibm_db2.i5_max_pconnect | "0" | INI_SYSTEM |
自 ibm_db2 1.9.7 起可用。 |
ibm_db2.i5_override_ccsid | "0" | INI_SYSTEM |
自 ibm_db2 1.9.7 起可用。 |
ibm_db2.i5_servermode_subsystem | NULL | INI_SYSTEM |
自 ibm_db2 1.9.7 起可用。 |
ibm_db2.i5_sys_naming | "0" | INI_SYSTEM |
自 ibm_db2 1.9.7 起可用。 |
ibm_db2.instance_name | NULL | INI_SYSTEM |
自 ibm_db2 1.0.2 起可用。 |
以下是配置指令的简短说明。
ibm_db2.binmode
int此选项控制在PHP应用程序中用于转换为和从二进制数据转换的模式。
1 (DB2_BINARY)
2 (DB2_CONVERT)
3 (DB2_PASSTHRU)
ibm_db2.i5_all_pconnect
int此选项强制所有连接在 IBM i 上保持持久。基本上,所有db2_connect() 调用都透明地变为db2_pconnect() 调用。默认情况下,此选项为0
。此选项是为了方便在持久连接速度更快的场合使用。不应在新应用程序中使用此选项。
0 - 可以建立持久和非持久连接。
1 - 所有连接都是持久的。
ibm_db2.i5_allow_commit
int此选项控制使用的交易隔离模式。默认情况下,此选项为0
,因此不使用提交控制。如果在传递给db2_connect()或db2_pconnect()的连接选项数组中设置了数组键i5_commit
,则可以在连接时覆盖此选项。
0 - 不使用提交控制
1 - 读取未提交,可能出现脏读。
2 - 读取已提交,不会出现脏读。
3 - 可重复读取,不会出现脏读和不可重复读
4 - 可序列化,不会出现脏读、不可重复读和幻读
ibm_db2.i5_blank_userid
int这控制是否允许在 IBM i 上使用空白用户 ID。默认情况下,此选项为0
。与ibm_db2.i5_ignore_userid
不同,此选项不会强制所有用户 ID 为空或更改作业行为,而只是允许传递空用户 ID,以便以当前用户身份连接到 Db2。
0 - 不允许传递空白用户 ID。
1 - 允许传递空白用户 ID。
ibm_db2.i5_char_trim
int此选项控制是否在 IBM i 上修剪字符串的末尾。由于许多表使用用空格填充的固定列大小,因此提供了此选项作为方便之举。默认情况下,此选项为0
。
0 - 不修剪列。
1 - 删除返回的字符列末尾的空格。
ibm_db2.i5_dbcs_alloc
int此选项会影响 IBM i 上的内部缓冲区分配策略。默认情况下,此选项为0
。当设置此选项时,将分配具有更大大小的缓冲区,以防数据库在编码之间转换时低估字符串的大小。此选项使用六倍的缓冲区内存(以适应最大的 UTF-8 序列),但如果返回截断的数据,则可能需要此选项。
0 - 分配最小大小的缓冲区。
1 - 分配更大大小的缓冲区。
ibm_db2.i5_guard_profile
int此选项检查连接到 IBM i 上的持久数据库连接时是否切换了数据库用户概要文件,如果切换了,则断开与数据库的连接。默认情况下,此选项设置为0
。
0 - 不检查概要文件交换。
1 - 检查概要文件交换,如果交换则断开连接。
ibm_db2.i5_log_verbose
int此选项设置是否始终将 SQL 诊断消息(如警告和错误)发送到 IBM i 上的 PHP 错误日志。通常,只有在失败时才会将简短消息(例如“语句执行失败”)发送到 PHP 错误日志,因为此选项默认设置为0
。请注意,您仍然可以并且应该手动调用例如db2_stmt_errormsg() 作为检查函数是否失败的一部分。
0 - 只记录简短消息。
1 - 除了简短消息外,还记录 SQL 诊断消息。
ibm_db2.i5_ignore_userid
int在 IBM i 上运行时,此选项会忽略连接到数据库时的用户 ID,并在 PHP 作业内部运行 SQL/CLI 功能,而不是单独的作业。默认情况下,此选项为0
。启用后,它不再使用单独的数据库服务器作业,而是始终使用当前用户概要文件作为数据库,忽略传递给db2_connect()和db2_pconnect() 的用户名和密码。
0 - 使用指定的凭据,并使用 SQL/CLI 服务器作业。
1 - 始终使用空白凭据,并在 PHP 作业中运行 SQL/CLI。
ibm_db2.i5_job_sort
int控制 IBM i 上的作业排序选项。默认情况下,此选项为0
。这对应于 IBM i SQL/CLI SQL_ATTR_CONN_SORT_SEQUENCE
属性。
0 - 使用*HEX
排序选项,按字节排序。
1 - 使用为 PHP 作业设置的作业排序序列。
2 - 使用为数据库作业设置的作业排序序列。
ibm_db2.i5_max_pconnect
int这会影响在 IBM i 上运行时可以重用持久连接的次数。默认情况下,此设置为0
,这意味着始终可以重用持久连接。此选项可以帮助解决长期运行的数据库作业中的问题(例如,如果过程泄漏内存),但这显然不是长期的解决方案。
ibm_db2.i5_override_ccsid
int用于从 IBM i 上的 EBCDIC 进行字符转换的 PASE CCSID。默认情况下,此值为0
,它将选择默认的 PASE 作业 CCSID,该 CCSID 来自 PASE 本地设置。例如,将其设置为1208
将使用 UTF-8。只有当 PASE 作业 CCSID 不是预期的 CCSID 并且无法修改区域设置时,才应修改此设置。
要了解有关 IBM i 上 CCSID 的更多信息,请参阅» IBM 文档。要了解 IBM i PASE 上的语言环境如何映射到 CCSID,请参阅» IBM 文档。
ibm_db2.i5_sys_naming
int此选项控制连接到 IBM i 系统时的命名模式。默认情况下,此选项为0
。命名模式会影响名称的解析方式和允许的名称语法。设置为0
时,此选项使用句点限定名称,并使用默认库或用户 ID 来解析名称。设置为1
时,此选项使用斜杠限定名称,并使用作业库列表来解析名称。
0 - 使用 SQL 命名模式 (“SCHEMA.TABLE”)。
1 - 使用系统命名模式 (“LIBRARY/FILE”)。
要了解有关 IBM i 上命名模式的更多信息,请参阅» IBM 文档。
ibm_db2.i5_servermode-subsystem
string此选项更改 IBM i 上子系统数据库服务器作业运行所在的子系统。默认情况下,此选项为null
,因此作业将在 QSQSRVR 作业的默认子系统下运行。
ibm_db2.instance_name
string在 Linux 和 UNIX 操作系统上,此选项定义用于编目数据库连接的实例名称。默认情况下,此选项为null
。如果设置此选项,则其值将覆盖DB2INSTANCE环境变量设置。
此选项在 Windows 操作系统上被忽略。
我觉得 ibm_db2.i5_dbcs_alloc 的解释很难理解。
在 ibm_db2 扩展内部,如果 i5_dbcs_alloc 值为 1,则会分配字符串列长度的 6 倍。
分配的区域用于在 UTF-8 和 EBCDIC 字符编码之间进行转换。
根据 UTF-8 的定义,字母长度最多需要 6 个字节。
注意
对于长列,分配的大小可能会超过 DB2 中定义的上限,因为原始列的大小乘以了 6 倍。这可能会导致结果数据变为 null。