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

前端之家收集整理的这篇文章主要介绍了php mssql扩展SQL查询中文字段名解决方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一、问题:

数据库是MS sqlServer2000,要把sqlServer2000里的一张表的数据导入MysqL5,其中sqlServer2000表的字段以简体中文命名(强烈建议不要以中文做为字段名)。其实操作就是对sqlServer查询记录,插入到MysqL里。选择的脚本语言是PHPPHP打开MSsqlMysqL扩展,对这两个数据库操作都是很容易的问题。
问题就出现在sqlServer中表的字段名是中文,写好的查询语句在sqlServe里测试是通过有记录返回,用PHP的MSsql扩展查询就是报错。
上网查了资料,网上相关的信息不太多,很多网友都认为是PHP的MSsql扩展不支持sql语句中有中文。查了一下资料,PHP的MSsql支持sql中有中文的语句。出现报错问题大多是因为编码的问题,编码数据库和编码与查询语句编码不统一,查询语句到sqlServer里中文部分就成了乱码,造成查询失败。

二、解决方法

知道了原因,接下来分析解决,确认是编码不统一的问题。解决分以下几步:
1、确认sqlServer 数据库的编码,我的数据编码是GBK。
2、确认当前PHP脚本文件的编码,我的编码是UTF-8。
3、转换SQL查询语句的的编码。
补充:有的网友提到要把PHP的脚本文件编码转成和数据库编码一致,其实这一步大可不必,只要确认你的sql语句和数据库的编码一致就可以,这里建议不必转换的原因是如果你的PHP脚本文件里包含其它PHP脚本,那也得对所有include或require的脚本文件编码转换,不然PHP脚本编码不统一很容易出错,若互相关联的文件很多,这也是一件很麻烦的问题而且把事情复杂化了。

三、方案:


写一个转换函数,在把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);
原文链接:https://www.f2er.com/php/26927.html

猜你在找的PHP相关文章