我的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";