【问题标题】:Greek character insertion in php compared to SQL server management studio与 SQL Server Management Studio 相比,PHP 中的希腊字符插入
【发布时间】:2015-09-21 15:17:19
【问题描述】:

我有一个 sql server 表:

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

我试过&lt;meta charset="utf-8"&gt;&lt;meta charset="utf-16"&gt; - 没有区别。

所以 - 两个问题:

这是怎么回事?

如何才能使 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

【问题讨论】:

标签: php sql-server


【解决方案1】:

看来我只需要在我的连接字符串中添加"CharacterSet"=&gt;"UTF-8"。其他非 ASCII 数据在没有添加此功能的情况下已成功进入该数据库已有很长时间,这让我感到震惊。

$connectionInfo = array("Database"=>"mydatabase", "UID"=>"myuserid", "PWD"=>"mypassword", "CharacterSet"=>"UTF-8");
$cn = sqlsrv_connect("myserver", $connectionInfo);
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多