我们有PHP服务器代码,在iSeries中端执行SQL语句。
以下是SQL查询的简化版本
SELECT 'Regular' "sales_type", sum(sales_type1) "sales" FROM salesTable
查询执行得很好,问题是当使用诸如“sometext”“title”这样的静态字段/值时,结果在PHP中返回时,它们不是所需的格式
string(7) "م�����"
db2_connect ( '*LOCAL', 'user', 'pass' );
if (! $connection) {[error code]}
$stmt = db2_prepare ( $connection, $strSql );
if (! db2_execute ( $stmt ) ) { [error code ]
while ( $row = db2_fetch_array ( $stmt ) ) {
var_dump($row[1]);
}
谢了!
编辑
根据bucks的建议,我们将用户配置文件CCSID更改为37,而不是65535
string(7) "Ù…‡¤“™"
_COOKIE["ZDEDebuggerPresent"] php,phtml,php3
_SERVER["ZendEnablerConfig"] /www/zendserver/conf/fastcgi.conf
_SERVER["PHPRC"] /usr/local/ZendSvr/etc/
_SERVER["PHP_FCGI_CHILDREN"] 40
_SERVER["PHP_FCGI_MAX_REQUESTS"] 0
_SERVER["CCSID"] 819
_SERVER["LANG"] C
_SERVER["INSTALLATION_UID"] 20101203131436121338
_SERVER["LDR_CNTRL"] MAXDATA=0x40000000
_SERVER["LIBPATH"] /usr/local/ZendSvr/lib
_SERVER["DB2NOEXITLIST"] TRUE
_SERVER["ORACLE_HOME"] .
_SERVER["ORA_NLS10"] no value
_SERVER["ORA_NLS_PROFILE33"] no value
_SERVER["FCGI_ROLE"] RESPONDER
_SERVER["REDIRECT_UNIQUE_ID"] UYKvWcCoAQIAAnZHWG8AABS@
_SERVER["REDIRECT_STATUS"] 200
_SERVER["UNIQUE_ID"] UYKvWcCoAQIAAnZHWG8AABS@
_SERVER["QIBM_USE_DESCRIPTOR_STDIO"] Y
_SERVER["HTTP_HOST"] vmas400.vm.com:10090
_SERVER["HTTP_CONNECTION"] keep-alive
_SERVER["HTTP_X_REQUESTED_WITH"] XMLHttpRequest
_SERVER["HTTP_USER_AGENT"] Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31
_SERVER["CONTENT_TYPE"] application/x-www-form-urlencoded
_SERVER["HTTP_ACCEPT"] */*
_SERVER["REFERER"] http://vmas400.vm.com:10090ZendServer/Index/Index
_SERVER["HTTP_REFERER"] http://vmas400.vm.com:10090/ZendServer/Index/Index
_SERVER["REFERER_URL"] http://vmas400.vm.com:10090/ZendServer/Index/Index
_SERVER["HTTP_ACCEPT_ENCODING"] gzip,deflate,sdch
_SERVER["HTTP_ACCEPT_LANGUAGE"] en-US,en;q=0.8
_SERVER["HTTP_ACCEPT_CHARSET"] ISO-8859-1,utf-8;q=0.7,*;q=0.3
_SERVER["HTTP_COOKIE"] ZENDSERVERSESSID=7asfv608qffhv556msem6evi66; CosmeticContest=16062; CompanyWithStoreDetail=16061; TYLYClassAnalysis=16068; OrderDetail=17220; RmsOrders=17221; DailyReceipts=16063; DailySales=17562; OnOrder=16064; OpenPurchaseOrders=17566; RegularPriceRankings=17568; ReviewStatistics=17570; SalesAndStock=17573; StocksByPeriod=17575; Top10BestSellers=17577; ReplenishmentAssortment=17269; RABS=17616; FreeFormatSku=16473; TYLYSalesAndOH=21294; SalesRecapByDate=16312; VendorAgendaSummary=23219; BasicStock=23474; InStock=16067; RegSalesAvgStockSummary=21270; TYLYSalesMDGMByStore=23822; VendorAgenda=23826; Header=16066; usc=adam; hudi[u]=d106b7a04c0d94b8a0e7624a017ead98324b57e8; hudi[i]=fec51923e58c84db4647d2b3e11fe03ec3f0c202; FreeFormat=16506; __utma=118969486.352613215.1355776933.1365626094.1367348033.12; __utmz=118969486.1355776933.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); ZDEDebuggerPresent=php,phtml,php3
_SERVER["PATH"] /bin:/usr/bin:/usr/ucb:/usr/bsd:/usr/local/bin
_SERVER["SERVER_SIGNATURE"] no value
_SERVER["SERVER_SOFTWARE"] Apache
_SERVER["SERVER_NAME"] vmas400.vm.com
_SERVER["SERVER_ADDR"] 192.168.1.2
_SERVER["SERVER_PORT"] 80
_SERVER["REMOTE_ADDR"] 172.16.129.193
_SERVER["DOCUMENT_ROOT"] /www/zendserver/htdocs/prod
_SERVER["SERVER_ADMIN"] [no address given]
_SERVER["SCRIPT_FILENAME"] /usr/local/zendsvr/gui/html/index.php
_SERVER["DOCUMENT_NAME"] /usr/local/zendsvr/gui/html/index.php
_SERVER["REMOTE_PORT"] 14259
_SERVER["REDIRECT_QUERY_STRING"] dojo.preventCache=1367519066445
_SERVER["REDIRECT_URL"] /ZendServer/Information/Phpinfo
_SERVER["GATEWAY_INTERFACE"] CGI/1.1
_SERVER["SERVER_PROTOCOL"] HTTP/1.1
_SERVER["REQUEST_METHOD"] GET
_SERVER["QUERY_STRING"] dojo.preventCache=1367519066445
_SERVER["REQUEST_URI"] /ZendServer/Information/Phpinfo?dojo.preventCache=1367519066445
_SERVER["SCRIPT_NAME"] /ZendServer/index.php
_SERVER["DOCUMENT_URI"] /ZendServer/index.php
_SERVER["RULE_FILE"] conf/httpd.conf
_SERVER["PHP_SELF"] /ZendServer/index.php
_SERVER["REQUEST_TIME"] 1367519066
解决方案是将用户配置文件改为使用CCSID37,并将服务器作业改为使用CCSID37。我们将进行手动更改,以便当作业重新启动时,它们不会恢复。
如果IBM端配置正确,转换可以自动进行。让IBM管理员检查系统值QCCSID。如果设置为65535,这就是为什么没有翻译发生。65535表示系统上的所有数据都是二进制的,永远不应该被翻译。CCSID有一个层次结构。它从系统级QCCSID开始,向下移动到用户配置文件,最后向下移动到单个表。这是为了处理使用多种语言的系统。
系统在65535的主要原因是因为当当前中档机的远祖部署时,有一种单一的语言;一个EBCDIC,当引入多种语言时,默认语言被设置为“不翻译”。
EBCDIC不再是单一字符集。每种语言都有一种编码。美国英语是CCSID(37)。如果发现CCSID是问题所在,请让管理员使用正确的CCSID创建一个测试用户配置文件,并尝试这样做。
编辑1:我刚刚在我的机器上做了一个测试。
编辑2:向返回的列添加一个文本。
<?php
//Establish connection to database
$host = "midrange";
$conn = db2_connect ($host, user, pass);
?>
<table width="75%" border="1" cellspacing="1" cellpadding="1" bgcolor="#eeeeee">
<tr>
<td><b>Name</b></td>
<td><b>Email</b></td>
<td><b>3rd column</b></td>
</tr>
<?php
$query = 'Select name, email, \'Markdown\' "THIRD" from table';
//Execute query
$queryexe = db2_exec($conn, $query) ;
//Fetch results
while(db2_fetch_row($queryexe)) {
$name = db2_result($queryexe, 'NAME');
$email = db2_result($queryexe, 'EMAIL');
$const = db2_result($queryexe, 'THIRD');
//Put the results in an HTML table.
print("<tr bgcolor=#ffffff>\n");
print("<td>$name</td>\n");
print("<td>$email</td>\n");
print("<td>$const</td>\n");
print("</tr>\n");
}
?>
</table>
我的所有表都是CCSID(37)IBM i 7.1。
phpinfo()报告IBM_DB2 1.9.0,PHP 5.3.3我注意到我启用了iconv支持,我的服务器CCSID是819-美国ASCII。
编辑3:非常部分的phpinfo()
ibm_db2
IBM DB2, Cloudscape and Apache Derby support enabled
Module release 1.9.0
Module revision $Revision: 297218 $
Binary data mode (ibm_db2.binmode) DB2_BINARY
DB2 instance name (ibm_db2.instance_name) no value
iconv
iconv support enabled
iconv implementation IBM iconv
iconv library version unknown
Directive Local Value Master Value
iconv.input_encoding ISO8859-1 ISO8859-1
iconv.internal_encoding ISO8859-1 ISO8859-1
iconv.output_encoding ISO8859-1 ISO8859-1
Environment
Variable Value
ZendEnablerConfig /www/zendsvr/conf/fastcgi.conf
PHPRC /usr/local/ZendSvr/etc/
PHP_FCGI_CHILDREN 5
PHP_FCGI_MAX_REQUESTS 0
CCSID 819
LANG en_US
INSTALLATION_UID 20101215125734236656
LIBPATH /usr/local/ZendSvr/lib
DB2NOEXITLIST TRUE
PHP Variables
Variable Value
_REQUEST["TJE"] no value
_REQUEST["TE3"] no value
_REQUEST["ZDEDebuggerPresent"] php,phtml,php3
_COOKIE["TJE"] no value
_COOKIE["TE3"] no value
_COOKIE["ZDEDebuggerPresent"] php,phtml,php3
_SERVER["ZendEnablerConfig"] /www/zendsvr/conf/fastcgi.conf
_SERVER["PHPRC"] /usr/local/ZendSvr/etc/
_SERVER["PHP_FCGI_CHILDREN"] 5
_SERVER["PHP_FCGI_MAX_REQUESTS"] 0
_SERVER["CCSID"] 819
_SERVER["LANG"] en_US
_SERVER["INSTALLATION_UID"] 20101215125734236656
_SERVER["LIBPATH"] /usr/local/ZendSvr/lib
_SERVER["DB2NOEXITLIST"] TRUE
_SERVER["FCGI_ROLE"] RESPONDER
_SERVER["SCRIPT_URL"] /hello.php
_SERVER["QIBM_USE_DESCRIPTOR_STDIO"] Y
_SERVER["HTTP_USER_AGENT"] Mozilla/5.0 (Windows NT 6.1; rv:20.0) Gecko/20100101 Firefox/20.0
_SERVER["HTTP_ACCEPT"] text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
_SERVER["HTTP_ACCEPT_LANGUAGE"] en-US,en;q=0.5
_SERVER["HTTP_ACCEPT_ENCODING"] gzip, deflate
_SERVER["HTTP_DNT"] 1
_SERVER["HTTP_CONNECTION"] keep-alive
_SERVER["HTTP_PRAGMA"] no-cache
_SERVER["HTTP_CACHE_CONTROL"] no-cache
_SERVER["PATH"] /bin:/usr/bin:/usr/ucb:/usr/bsd:/usr/local/bin
_SERVER["SERVER_SIGNATURE"] no value
_SERVER["SERVER_SOFTWARE"] Apache
_SERVER["DOCUMENT_ROOT"] /www/zendsvr/htdocs
_SERVER["SERVER_ADMIN"] [no address given]
_SERVER["SCRIPT_FILENAME"] /www/zendsvr/htdocs/hello.php
_SERVER["DOCUMENT_NAME"] /www/zendsvr/htdocs/hello.php
_SERVER["REMOTE_PORT"] 54747
_SERVER["GATEWAY_INTERFACE"] CGI/1.1
_SERVER["SERVER_PROTOCOL"] HTTP/1.1
_SERVER["REQUEST_METHOD"] GET
_SERVER["QUERY_STRING"] no value
_SERVER["REQUEST_URI"] /hello.php
_SERVER["SCRIPT_NAME"] /hello.php
_SERVER["DOCUMENT_URI"] /hello.php
_SERVER["RULE_FILE"] conf/httpd.conf
_SERVER["PHP_SELF"] /hello.php
_SERVER["REQUEST_TIME"] 1367514482
编辑4:如何使服务器作业CCSID(37)
有几种方法可以让服务器作业运行美国英语。至于哪一个对整个服务器操作的影响最小,这是一个管理决定。我将我的美国英语系统设置为通过IPL访问QCCSID37,没有看到任何问题。
问题内容: 我应该通过使用Java将EBCDIC文件转换为ASCII。到目前为止,我有以下代码: 文件描述如下: 我们可以忽略每一行的前2个字节。问题是字节存在USAGE IS COMP,因为读者无法正确转换它们,我想我应该将它们读取为字节或其他内容,尽管我不知道如何。 问题答案: 如果我正确地解释了这种格式,则您的二进制文件格式具有固定长度的记录。其中一些记录不是字符数据(COBOL计算字段?)
我正在尝试使用Apache Beam中JRecord中的CobolIoProvider类将EBCDIC文件转换为ASCII。 我正在使用的代码: 代码根据需要读取和转换文件。我只能从本地系统读取cobolfilename和copybookname,它们基本上分别是EBCDIC文件和copybook的路径。但是,当我试图从GCS读取文件时,它失败了,FileNotFoundException--“文
我尝试过使用python 2.6将EBCDIC转换为ASCII,但在这方面存在许多问题,比如压缩字段没有得到转换,记录计数增加。 是否有任何方法转换EBCDIC文件压缩字段到ASCII格式。
问题内容: 我能够从发送消息到上。如果我从发送消息,则使用任何可访问性(包括完整的语言本地化)都没有区别;英语也没有问题。正确的编码很重要,只有以下代码行: 不幸的是,这是无效的。我要从中获取消息的情况有所不同。 在我得到消息的情况下,从Windows操作系统(英语,没有任何语言包),我能够把消息来自于形式。 如果Windows操作系统使用某些语言包进行了完全本地化,则我将收到一个例外 消息缓冲区