Bug #80869 [Fbk]: SQL Server: Read NVARCHAR Unicode
| From: | cmb@php.net | Date: | Mon, 15 Mar 2021 17:47:55 +0000 |
| Subject: | Bug #80869 [Fbk]: SQL Server: Read NVARCHAR Unicode | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-232751@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=80869&edit=1
ID: 80869
Updated by: cmb@php.net
Reported by: sergiopaternoster73 at gmail dot com
Summary: SQL Server: Read NVARCHAR Unicode
Status: Feedback
Type: Bug
Package: PDO ODBC
Operating System: Ubuntu 18.04 Server
PHP Version: 8.0.3
Assigned To: cmb
Block user comment: N
Private report: N
New Comment:
An ODBC trace is not related to segfaults (you probably mean a
stack backtrace). Anyway, since I'm using Windows I'm not sure
how to get an ODBC trace on your platform, but the FreeTDS User
Guide has a chapter on logging[1]; probably the last section on
this page is relevant.
See <https://bugs.php.net/80868#1615816567> for an
example of an
ODBC trace.
<https://www.freetds.org/userguide/logging.html>
Previous Comments:
------------------------------------------------------------------------
[2021-03-15 17:42:41] sergiopaternoster73 at gmail dot com
I tested it with a newer SQL Server 2017 and a "cleaner" NVARCHAR table. Here the results
with PHP 7 and 8. Looks like the encoding is ASCII in PHP 8 while it's UTF-8 in PHP 7
Version: 7.4.13
mb_detect_encoding(): UTF-8
Result:
æ²³å馿²³ç»æµå¼ååºè¿æ²³å¤§éä¸ä¾§å®æè¡åä¾§
Version: 8.0.3
mb_detect_encoding(): ASCII
Result: ????????????????????
------------------------------------------------------------------------
[2021-03-15 17:19:06] sergiopaternoster73 at gmail dot com
Please, pardon my ignorance. I don't get any segfault. How can I provide an ODBC trace?
------------------------------------------------------------------------
[2021-03-15 16:49:15] cmb@php.net
Could you please provide ODBC traces for PHP 7.4 and 8.0; ideally
place them somewhere publicly accessible on the Web (e.g.
gist.github.com, pastebin.com) and only link to them.
------------------------------------------------------------------------
[2021-03-15 16:25:05] sergiopaternoster73 at gmail dot com
Description:
------------
I have an SQL Server 2012 table that contains all NVARCHAR columns.
With PHP 7.3/7.4 I can read both ASCII and UNICODE characters from the table by running this query:
SELECT CAST([NAME] AS NVARCHAR(MAX)) AS [Name] FROM [Table].
With php-8.0.3 I can still read ASCII results (plain English, for example) but not UNICODE anymore
(Chinese characters, in my case).
I use php-8.0.3 with FreeTDS on Linux Ubuntu. In PHP 7.3/7.4 works well!
Test script:
---------------
```
$query = "SELECT
CAST([NAME] AS NVARCHAR(MAX)) AS [Name]
FROM [Table]";
$pdo = new PDO("odbc:MyConnection","MyUser","MyPassword");
$rs = $pdo->query($query);
$result = $rs->fetchColumn();
file_put_contents("result.txt",$result);
$pdo = null;
```
/etc/odbc.ini settings
[MyConnection]
Description = "Data Warehouse"
Port = 1433
Driver = FreeTDS
Description = SQL Server
Trace = No
Server = my.server.com
Database = AB
TDS_Version = 8.0
Client_Charset = UTF-8
ApplicationIntent = ReadOnly
Expected result:
----------------
Readable Unicode (Chinese, in my case) characters (like it is in PHP 7)
Actual result:
--------------
Unreadable characters
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=80869&edit=1