background image

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 语句写

错了,输出结果如下:

 

代码如下

: