PHP FREETDS MSSQL和语言环境特殊字符

问题描述 投票:0回答:1

我的Raspberry3已连接到Windows MSSQL服务器,由于某些字符(意大利语)已转换,因此在使用ODBC连接(FreeTDS)更新和在MSSQL中插入字符串时遇到了很多麻烦。例如,此字符串“管道1mØ30厘米,最高温度90°C”被保存为“管道1mø30厘米,最高温度90°C”。我在网上阅读了很多文章,试图在php.ini中更改default_charset,在freetds.conf中设置“客户端数据集”,还尝试了iconv()函数,但无济于事。

这是一个PHP示例代码。

<?php
setlocale(LC_ALL, 'it_IT');    $odbc=odbc_connect("DRIVER=FreeTDS;SERVER=MyServer\SQLEXPRESS;Database=MyDB;UID=myUser;$PWD=myPWD;TDS_Version= Auto;Port=1433;", "","") or die(odbc_errormsg());
$value = 'string with special chars: °±Øòàèé?°§ù end string';
$q="UPDATE MYTABLE set MYFIELD = '$value' WHERE ID = 1";
odbc_exec($odbc, $q) or die("<p>".odbc_errormsg());
odbc_close($odbc);
?>

结果是:“带有特殊字符的字符串:ðÃ,±±ƒƒ〜òÃÂèé©?°§§ƒÂ结尾字符串”

我该如何解决?

php sql-server odbc raspberry-pi3 freetds
1个回答
0
投票

虽然使用参数是正确的解决方案,但发生这种情况的原因是特殊字符已被转换为varchar,而后者没有代码点。

在此查询中,$value的内容将在当前归类中转换为varchar每个字符一个字节。

$q="UPDATE MYTABLE set MYFIELD = '$value' WHERE ID = 1";

unicode nvarchar字符串文字的前缀为N。 EG

$q="UPDATE MYTABLE set MYFIELD = N'$value' WHERE ID = 1";
© www.soinside.com 2019 - 2024. All rights reserved.