php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #27416 Accents not supported by mssql functions
Submitted: 2004-02-27 09:03 UTC Modified: 2004-02-27 18:27 UTC
From: mooseyproductions at hotmail dot com Assigned:
Status: Not a bug Package: MSSQL related
PHP Version: 4.3.4 OS: Windows 2000/XP
Private report: No CVE-ID: None
Anyone can comment on a bug. Have a simpler test case? Does it work for you on a different platform? Let us know!
Just going to say 'Me too!'? Don't clutter the database with that please !
Your email address:
MUST BE VALID
Solve the problem:
31 - 21 = ?
Subscribe to this entry?

 
 [2004-02-27 09:03 UTC] mooseyproductions at hotmail dot com
Description:
------------
When reading data from a SQL Server database, certain ASCII characters are incorrectly retrieved. Entering accented characters into the database works fine, however reading them from the database gives unexpected results.

ASCII chars 33 - 255 entered into database:

!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~???????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????

(This appears fine when looking at the database using MS Enterprise Manager)

Result from read query:

!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~__'?".??^%So_zY????Ͼ??????????????????????????ǎ???Ԑ??????ѥ???噞????????? ?Ƅ???????????Ф??????????????


It appears that characters after ASCII #127 are incorrectly returned from the database.

Using SQL Server 7.0 (ISO 8859-1 charset)


Reproduce code:
---------------
$string = '';
for ($i = 33; $i <= 255; $i++)
{
     $string .= chr($i);
}
 $db->query("UPDATE Test SET charset =  0x".bin2hex($string)." WHERE rowID = 1");

$result = $db->query("SELECT charset FROM Test WHERE rowID = 1");

$row = $db->getAssoc($result);

echo $row['charset'];

Expected result:
----------------
I expected to see what I had previously entered into the database. All text that contains accents is wrongly displayed.

Expected:

!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~???????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????


Actual result:
--------------
Actual:

!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~__'?".??^%So_zY????Ͼ??????????????????????????ǎ???Ԑ??????ѥ???噞????????? ?Ƅ???????????Ф??????????????

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2004-02-27 10:22 UTC] mooseyproductions at hotmail dot com
I have tried connecting to the SQL Server database using ODBC and it retrieves the data perfectly, as expected. I think I will use the ODBC functions for the meanwhile, until this bug is sorted.
 [2004-02-27 18:27 UTC] fmk@php.net
You need to use the same codepage to insert and fetch the data. When you insert data as binary values there is no codepage involved in the process but when you select the data it uses the OEM to ANSI convertion defined by the client library.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Dec 05 22:01:29 2024 UTC