У меня есть таблица сервера sql:
create table tmp (fname nvarchar(40))
У меня есть php-скрипт, который вставляет некоторые греческие символы:
$cn = sqlsrv_connect(... // insert greek chars sqlsrv_query($cn, "INSERT INTO tmp (fname) VALUES (N'ΚΩΝΣΤΑΝΤΙΝΟΣ')"); // read them back again $rs = sqlsrv_query($cn, "SELECT fname FROM tmp"); $row = sqlsrv_fetch_array($rs, SQLSRV_FETCH_NUMERIC); // output result print "<br />from database: " . $row[0]; sqlsrv_close($cn);
Это работает как ожидалось (т. Е. Греческий греческий)
Если теперь я использую SQL Server Management Studio (SSMS):
select * from tmp
Я получил:
ΚΩÎΣΤÎ'ÎΤΙÎΟΣ
Если я вставлю с помощью SSMS:
delete from tmp INSERT INTO tmp (fname) VALUES (N'ΚΩΝΣΤΑΝΤΙΝΟΣ') select * from tmp
Я получил:
ΚΩΝΣΤΑΝΤΙΝΟΣ
НО, если я получаю доступ к этому из php:
$cn = sqlsrv_connect(... $rs = sqlsrv_query($cn, "SELECT fname FROM tmp"); $row = sqlsrv_fetch_array($rs, SQLSRV_FETCH_NUMERIC); print "<br />from database: " . $row[0]; sqlsrv_close($cn);
Я получил:
?O?S???????S
Я пробовал <meta charset="utf-8">
и <meta charset="utf-16">
– не имеет значения.
Итак – два вопроса:
Что здесь происходит?
Как я могу получить согласованность с SSMS и php?
Я использую:
Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) Oct 19 2012 13:38:57 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor) Microsoft SQL Server Management Studio 11.0.2100.60 PHP 5.6.7