[php]mssql扩展,SQL查询中文字段名解决方法

前言

一般来说,用PHP的话,都是搭配MySQL数据库,用的都是utf8的编码。然而,不得不说,有时还是会有特殊情况的时候,那就是PHP+SqlServer,先不说PHP连SqlServer出现的问题会许多,单单SqlServer数据库的编码和PHP的编码不一样就容易出问题了。

问题

  • 在SQLServer中表的字段名是中文,写好的查询语句在SQLServe里测试是通过有记录返回,用PHP的MSSQL扩展查询就是报错;
  • 查询SqlServer数据库某表的SQL语句,里面有查找条件是中文的。

解决方法

  1. 确认SQLServer 数据库的编码,我的数据编码是GBK。
  2. 确认当前PHP脚本文件的编码,我的编码是UTF-8。
  3. 转换SQL查询语句的的编码。

注:有的网友提到要把PHP的脚本文件编码转成和数据库编码一致,其实这一步大可不必,只要确认你的SQL语句和数据库的编码一致就可以,这里建议不必转换的原因是如果你的PHP脚本文件里包含其它PHP脚本,那也得对所有include或require的脚本文件编码转换,不然PHP脚本编码不统一很容易出错,若互相关联的文件很多,这也是一件很麻烦的问题而且把事情复杂化了。

方案

  • sqlserver查看数据库编码
SELECT COLLATIONPROPERTY('Chinese_PRC_Stroke_CI_AI_KS_WS', 'CodePage')

注:
936 简体中文GBK
950 繁体中文BIG5
437 美国/加拿大英语
932 日文
949 韩文
866 俄文
65001 unicode UFT-8

  • 一个转换函数,在把SQL操作前把SQL语句编码转换。
//编码转换函数 
function utf8togb($s) { 
    return iconv('utf-8', 'gbk//IGNORE', $s); // IGNORE 参数是遇到不成转换的字符时忽略 
} 
//建议把所有中文字段用英文别名替换,方便下面操作还有编码转换等问题 
$sql="SELECT [id], [栏目] as typeid, [正题] as title, [作者] as author, convert(text, [正文]) as body FROM [文章表];"; 
$sql = utf8togb($sql); 
posted @ 2015-11-09 14:50:00 kuye 阅读(6246) 评论(0)
发表评论
昵称
邮箱
网址