background image

 

php mysql 扩展 SQL 查询中文字段名解决方法
问题就出现在 SQLServer 中表的字段名是中文,写好的查询语句在 SQLServe 里测试是通
过有记录返回,用 PHP 的 MSSQL 扩展查询就是报错

 

一、问题:
 
数据库是 MS SQLServer2000,要把 SQLServer2000 里的一张表的数据导入 MySQL5,其
中 SQLServer2000 表的字段以简体中文命名(强烈建议不要以中文做为字段名)。其实操作
就是对 SQLServer 查询记录,插入到 MySQL 里。选择的脚本语言是 PHP,PHP 打开
MSSQL 和 MySQL

 

扩展,对这两个数据库操作都是很容易的问题。

问题就出现在 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

);