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

2015-01-24信息快讯网

问题就出现在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); 
php 验证码(倾斜,正弦干扰线,黏贴,旋转)
解析PHP中empty is_null和isset的测试
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
浅析PHP中的UNICODE 编码与解码
解析PHP 使用curl提交json格式数据
解析php session_set_save_handler 函数的用法(mysql)
使用PHP实现Mysql读写分离
解析阿里云ubuntu12.04环境下配置Apache+PHP+PHPmyadmin+MYsql
解析centos中Apache、php、mysql 默认安装路径
解析mysql中UNIX_TIMESTAMP()函数与php中time()函数的区别
关于php操作mysql执行数据库查询的一些常用操作汇总
使用PHP遍历文件目录与清除目录中文件的实现详解
解析PHP中常见的mongodb查询操作
解析使用substr截取UTF-8中文字符串出现乱码的问题
joomla jce editor 解决上传中文名文件失败问题
解决ajax+php中文乱码的方法详解
探讨PHP JSON中文乱码的解决方法详解
深入理解用mysql_fetch_row()以数组的形式返回查询结果
深入分析使用mysql_fetch_object()以对象的形式返回查询结果
Mysql中分页查询的两个解决方法比较
php模板函数 正则实现代码
PHP获取文件后缀名的三个函数
php标签云的实现代码
记录PHP错误日志 display_errors与log_errors的区别
php在程序中将网页生成word文档并提供下载的代码
php排序算法(冒泡排序,快速排序)
PHP HTML JavaScript MySQL代码如何互相传值的方法分享
PHP fopen 读取带中文URL地址的一点见解
查找mysql字段中固定字符串并替换的几个方法
PHP+MySQL投票系统的设计和实现分享
mysql,mysqli,PDO的各自不同介绍
PHP UTF8中文字符截断函数代码
php写的带缓存数据功能的mysqli类
PHP手机号码归属地查询代码(API接口/mysql)
PHP实现手机归属地查询API接口实现代码
php插入中文到sqlserver 2008里出现乱码的解决办法分享
Php中文件下载功能实现超详细流程分析
php和mysql中uft-8中文编码乱码的几种解决办法
最新用php获取谷歌PR值算法,附上php查询PR值代码示例
PHP版国家代码、缩写查询函数代码
pdo中使用参数化查询sql
©2014-2024 dbsqp.com