php 插入中文到 sqlserver 2008 里出现乱码的解决办法分享
今天使用
php 操作数据库时发现插入 SQL Server 2008 数据库里的中文字段出现乱码,通过
下面的方法解决了,需要的朋友可以参考下
今天使用
php 操作数据库时发现插入 SQL Server 2008 数据库里的中文字段出现乱码,下面
是我一开始时的一些情况:
开发环境是
php5.3.3+Apache2.2.17+SQL Server 2008,php 脚本文件的编码是 utf-8,传给数
据库的编码是
GB2312(SQL Server 的默认字符编码可能是这个,我不肯定),我用的是微
软官方提供的
SQLSRV 库来连接数据库的(PS:SQL Server 2005 开始已经不支持用
mssql.dll 来连接了),故使用 sqlsrv_query(
$conn
, "set names GB2312");语句来设置传给数据
库的编码格式的,
sql 语句这样写了:insert into Opinion (content) values ('aaa 中文内容');
运行这条
sql 语句,发现执行不成功,用 sqlsrv_errors()函数来输出错误信息,得到如下结
果:
代码如下
:
Array ( [0] => Array ( [0] => IMSSP [SQLSTATE] => IMSSP [1] => -46 [code] => -46 [2] => An
error occurred translating the query string to UTF-16:
�
ڶ
��
ڵֽ
�Ŀ
�����ҳ�У�û�д�
Unicode �ַ����
ӳ�
䵽���ַ
� . [message] => An error occurred translating the query
string to UTF-16:
�
ڶ
��
ڵֽ
�Ŀ
�����ҳ�У�û�д
� Unicode �ַ����ӳ�
䵽���ַ
� . ) )
这是在网页上显示的结果,上面的乱码是原封不动
copy
下来的。从
“An error occurred
translating the query string to UTF-16”可以看出是字符编码转换有问题导致的。于是我使用
php 的 iconv 函数来对中文进行强制编码转换,然后执行 sql 语句,代码如下:
代码如下
:
$string
= iconv('utf-8', 'GB2312//IGNORE', 'aaa 中文内容');
$sql
= "insert into Opinion (content) values ( $string)";
[code]
这时候又报错了,错误信息如下:
[code]
Array ( [0] => Array ( [0] => 42S22 [SQLSTATE] => 42S22 [1] => 207 [code] => 207 [2] =>
[Microsoft][SQL Server Native Client 10.0][SQL Server]
���� 'aaa��������'
��Ч
�� [message] => [Microsoft][SQL Server Native Client 10.0][SQL Server]����
'aaa
��������' ��Ч
�� ) )
这个错误信息看不出什么头绪,我又把
sql 语句输出到网页上看一下是不是 sql 语句写
错了,输出结果如下:
代码如下
: