Bug #80869 [Com]: SQL Server: Read NVARCHAR Unicode

From: Date: Mon, 15 Mar 2021 18:08:58 +0000
Subject: Bug #80869 [Com]: SQL Server: Read NVARCHAR Unicode
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-232753@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 Comment by: sergiopaternoster73 at gmail dot com 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: Thank you for the guidance. Here the traces: php-7.4 https://gist.github.com/capsandiego/8f2176ebc29ab961612bb225f06f452e php-8.0.3 https://gist.github.com/capsandiego/92d963c3fa40bfcf8861bc46a2d33f35 Previous Comments: ------------------------------------------------------------------------ [2021-03-15 17:47:55] cmb@php.net 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> ------------------------------------------------------------------------ [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

« previous php.bugs (#232753) next »