Php DB2如何使用PDO指定连接字符集

Php DB2如何使用PDO指定连接字符集,php,mysql,pdo,db2,Php,Mysql,Pdo,Db2,我正在寻找以下MySQL查询的DB2翻译: SET NAMES 'UTF8' 我已经使用PDO_ODBC连接到DB2,并且我可以成功地查询它,因此这不是连接问题 驱动程序说,NAMES是一个意外的标记,所以我想还有另一种方法来指定连接字符集 我搜索过stackoverflow,但大多数答案都是针对mysql驱动程序的,我不知道在IBM文档中搜索什么(这不是最容易导航的) 我要寻找的是一个DB2可以接受的SQL查询,它具有与MySQL的集合名称xxx相同的效果。DB2中的编码是在创建数据库时设置

我正在寻找以下MySQL查询的DB2翻译:

SET NAMES 'UTF8'
我已经使用PDO_ODBC连接到DB2,并且我可以成功地查询它,因此这不是连接问题

驱动程序说,
NAMES
是一个意外的标记,所以我想还有另一种方法来指定连接字符集

我搜索过stackoverflow,但大多数答案都是针对mysql驱动程序的,我不知道在IBM文档中搜索什么(这不是最容易导航的)


我要寻找的是一个DB2可以接受的SQL查询,它具有与MySQL的
集合名称xxx

相同的效果。DB2中的编码是在创建数据库时设置的。为了在数据库中插入正确的字符,应用程序必须使用正确的编码执行,并且支持正确的编码。

在DB2中没有等效的语句

DB2客户机应用程序使用标准操作系统语言环境设置运行。在UNIX/Linux上,这是通过
LANG
环境变量设置的(可以用各种
LC.*
环境变量覆盖),在Windows上,这是使用控制面板配置的

在使用PHP的Linux/UNIX上,这意味着您需要在web服务器启动时设置适当的语言环境变量

注:

  • DB2提供了使用
    DB2CODEPAGE
    注册表变量覆盖任何操作系统或环境级别设置的选项。此设置位于DB2客户机实例级别,因此它将影响使用您安装的DB2客户机连接的任何/所有应用程序

  • 如果由
    LOCALE
    确定的客户机应用程序代码页与数据库代码页不同,请注意,DB2客户机将在客户机代码页和数据库代码页之间双向执行代码页转换


我正在使用pdo_ibm,我找到了一种正确设置字符集的方法,如下所示:

1) 通过一些手动方式(DBeaver等)进行以下查询:

从SYSCAT.DATATYPES中选择代码页,其中TYPENAME='VARCHAR';
把结果记下来。例如:1208

2) 您现在可以通过两种不同的方式设置此代码页:

PHP方式
putenv('DB2CODEPAGE=1208');
首先使用它,然后实例化PDO对象

操作系统方式 (摘自)

对于Windows:

  • 导航到控制面板>系统,然后单击高级选项卡。单击环境变量
  • 在系统变量部分,单击新建
  • 在变量名字段中,DB2CODEPAGE
  • 在变量值字段中,输入步骤1中返回的值
对于UNIX,设置变量,如下所示:

setenv DB2CODEPAGE
例如:setenv 1208


创建变量后,可能需要重新启动计算机

请参阅手册。@Fred ii-谢谢,但我正在寻找与MySQL设置类似的DB2。请看一下其中提到的“清单14设置DB2实例,使用utf-8$Db2set db2codepage=1208”-这是否符合要求?另外,最后一个问题只提到了UTF-8——请看下面的问答:为什么不使用pdo Ibm?(这些是db2)正如php.net所说,pdo ibm连接到db2,然后使用set attribute(names)@MarcoMura谢谢你,但是你不认为set attribute甚至可以与基本ODBC一起工作吗?如果是这样,我应该写些什么来实现这一点?如果其他一切都失败,我将尝试使用PDO_IBM。您需要使用与数据库相同的编码配置应用程序/终端。为了获得编码:db2getdbcfg