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

时间:2014-11-26 15:56:11

标签: php mysql pdo db2

我正在寻找以下(和工作)MySQL查询的DB2转换:

SET NAMES 'UTF8'

我已经使用PDO_ODBC连接到DB2,我可以成功查询它,所以这不是连接问题。

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

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

我正在寻找的是DB2可接受的SQL查询,其具有与MySQL SET NAMES xxx

相同的效果

3 个答案:

答案 0 :(得分:2)

DB2中没有等效语句。

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

在使用PHP的Linux / UNIX上,这意味着您需要在Web服务器启动时设置正确的区域设置环境变量。

注意:

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我正在使用pdo_ibm,我发现了一种如下正确设置字符集的方法:

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

SELECT CODEPAGE FROM SYSCAT.DATATYPES WHERE TYPENAME = 'VARCHAR';

记下结果。例如:1208

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

PHP方式

putenv('DB2CODEPAGE=1208');

首先使用它,然后实例化PDO对象。

操作系统方式

(摘自https://docs.oracle.com/cd/E12102_01/books/AnyInstAdm784/AnyInstAdmPreInstall19.html

对于Windows:

  • 导航至“控制面板”>“系统”,然后单击“高级”选项卡。单击环境变量。
  • 在“系统变量”部分,单击“新建”。
  • 在“变量名”字段中,DB2CODEPAGE。
  • 在“变量值”字段中,输入在步骤1中返回的值。

对于UNIX,如下所示设置变量:

setenv DB2CODEPAGE <DB2CODEPAGE value>

例如:setenv 1208。

创建变量后,您可能需要重新引导计算机。