ID: 31042 Updated by: [EMAIL PROTECTED] Reported By: arhip at goldentele dot com -Status: Open +Status: Assigned Bug Type: OCI8 related Operating System: Linux PHP Version: 5.0.2 Assigned To: tony2001
Previous Comments: ------------------------------------------------------------------------ [2005-04-07 09:58:13] arhip at goldentele dot com Bug does not fixed. Tested on php5-200504070630 ------------------------------------------------------------------------ [2005-03-25 01:40:22] [EMAIL PROTECTED] Please try using this CVS snapshot: http://snaps.php.net/php5-latest.tar.gz For Windows: http://snaps.php.net/win32/php5-win32-latest.zip ------------------------------------------------------------------------ [2004-12-10 11:21:01] arhip at goldentele dot com Also tested on 5.1 snap: php5-200412100730 The result is the same. ------------------------------------------------------------------------ [2004-12-09 18:59:59] arhip at goldentele dot com Description: ------------ I have Oracle 8.1.7 working on linux. Some Oracle params: NLS_RDBMS_VERSION => 8.1.7.2.0 NLS_CHARACTERSET => CL8ISO8859P5 I have table named utf8_test. SQL> desc utf8_test; Name Type Nullable Default Comments ---- ------------ -------- ------- -------- ID NUMBER Y NAME VARCHAR2(10) Y SQL> select * from utf8_test; ID NAME ---------- ---------- 1 тест 2 проверка The result of fetching data is depended from NLS_LANG. When I fetched data from this table a result is depended from NLS_LANG variable. 1) When I fetch data with NLS_LANG=RUSSIAN_CIS.CL8MSWIN1251 character set, I receive 2 rows with correct data. 2) When I fetch data with NLS_LANG=RUSSIAN_CIS.UTF8 character set, I receive 2 rows, with incorrect data. Data in NAME field in 2-nd row is incorrect (FALSE instead of 'проверка'). But 1-st row is correct. I think the problem maybe in the folowing: This field is defined in database as varchar2(10); Length of the 1-st row NAME in UTF8 character set is 4*2=8 byte. (8<10) Length of the 2-nd row NAME in UTF8 character set is 8*2=16 byte. (16>10). Reproduce code: --------------- <? // oracle client NLS_LANG=RUSSIAN_CIS.UTF8 $conn = oci_new_connect( 'scott', 'tiger', 'DB' ); $cursor = oci_parse( $conn, 'select id, name from utf8_test' ); // tested with all oci_fetch_* functions oci_execute( $cursor, OCI_DEFAULT ); oci_fetch_all( $cursor, $result, 0, -1, OCI_FETCHSTATEMENT_BY_ROW ); print "<pre>"; var_dump($result); ?> Expected result: ---------------- array(2) { [0]=> array(2) { ["ID"]=> string(1) "1" ["NAME"]=> string(8) "тест" } [1]=> array(2) { ["ID"]=> string(1) "2" ["NAME"]=> string(16) "проверка" } } Actual result: -------------- array(2) { [0]=> array(2) { ["ID"]=> string(1) "1" ["NAME"]=> string(8) "тест" } [1]=> array(2) { ["ID"]=> string(1) "2" ["NAME"]=> bool(false) } } ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=31042&edit=1