PHP FREETDS MSSQL和区域设置特殊字符



我的Raspberry3连接到Windows MSSQL服务器,我在使用ODBC连接(FreeTDS(更新和插入MSSQL中的字符串时遇到了很多问题,因为一些字符(意大利语(被转换了。例如,该字符串"管道1m³30 cm。最高温度90°C"保存为"管道1m²402;²-30 cm。最高气温90°C。"。我在网上读了很多书,试图在php.ini中更改default_charset,在freetds.conf中设置"客户端数据集",还尝试了iconv((函数,但都不起作用。

这是一个PHP示例代码。

<?php
setlocale(LC_ALL, 'it_IT');    $odbc=odbc_connect("DRIVER=FreeTDS;SERVER=MyServerSQLEXPRESS;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);
?>

结果是:"带有特殊字符的字符串:结束字符串">

我该如何解决?

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

在该查询中,$value的内容将转换为当前排序规则中每个字符的varchar单字节。

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

unicodenvarchar字符串文字的前缀是N。例如

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

最新更新