一、问题:

数据库是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 mssql扩展SQL查询中文字段名解决方法相关推荐

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

    一.问题: 数据库是MS SQLServer2000,要把SQLServer2000里的一张表的数据导入MySQL5,其中SQLServer2000表的字段以简体中文命名(强烈建议不要以中文做为字段名 ...

  2. .sql导入中文显示乱码解决方法

    .sql导入中文显示乱码解决方法 参考文章: (1).sql导入中文显示乱码解决方法 (2)https://www.cnblogs.com/fnote/p/8051682.html 备忘一下.

  3. sql查询结果字段名与字段值倒过来了

    数据库为sybase, sql如下: 1 select substring(LRRJG,1,7) as SSQJ, 2 sum(case when RWDL_BH = '01' then 1 else ...

  4. vba ado 执行多条mysql 语句,Excel VBA+ADO+SQL入门教程003:SQL查询中字段技巧的总结...

    原标题:Excel VBA+ADO+SQL入门教程003:SQL查询中字段技巧的总结 本章概要: 1,几个概念 1.1, 数据库和Excel工作簿 1.2,数据表和Excel工作表 1.3,记录.字段 ...

  5. sql查询数据库表名

    查询数据库里所有表名和字段名的语句 SQL 查询所有表名: SELECT NAME FROM SYSOBJECTS WHERE TYPE='U' SELECT * FROM INFORMATION_S ...

  6. sql查询某字段重复的数据

    sql查询某字段重复的数据 最近老是遇到添加新的约束问题,其中就有要求数据不能重复,那么以前哪些测试数据就不方便改了,但是又不能删除,所以为了防止重复,我们只能查询出来一个个改了,那么查询的Sql语句 ...

  7. 解决GeoTools中CQL解析中文字段名的问题

    GeoTools中CQL无法解析中文字段名的过滤条件,会报异常错误,经过一个下午的努力,终于通过简单有效的方式解决啦 String filterCondition = "temp='&quo ...

  8. 微信小程序云数据库where查询语句字段名和字段值都可以是变量

    微信小程序云数据库where查询语句字段名和字段值都可以是变量 想要实现的功能 遇到的问题 js代码 想要实现的功能 界面代码 // An highlighted block <view cla ...

  9. PL/SQL 查询的字段显示不全

    问题描述: PL/SQL 查询的字段显示不全. 问题原因: plsql字符编码是"AMERICAN_AMERICA.ZHS16GBK" select userenv('langua ...

最新文章

  1. Shell echo-使用echo实现更复杂的输出格式控制
  2. Docker知识1:Docker-hub简介
  3. Linq To Sql 练习
  4. 史上最全的五大算法总结
  5. python结构_Python 项目的结构
  6. fatal error C1010: 在查找预编译头时遇到意外的文件结尾
  7. windows下配置NGINX实现内网穿透并配置开机自启动
  8. Web测试-Web界面易用性测试
  9. redis配合LUA脚本
  10. Tortoiser三十集脱壳教程__ZC
  11. QGC 谷歌中国地图 火星坐标系 转换
  12. 计算机保研-中科院计算所霸面(笔试面试)
  13. 方舟服务器占用多少内存,方舟生存进化占用多少内存
  14. Getting Started in Six Sigma
  15. 华硕笔记本升级固态SSD过程
  16. 十分钟教会女朋友上手阿里云服务器
  17. 推荐几个免费的PDF to Word文件转换器
  18. 突破!龙芯国产域名服务器+红枫2.0 底层技术问题再进一步
  19. Fast Algorithm for GK Summary算法
  20. 平安好医生2018年营收33.38亿元 同比增长78.7%

热门文章

  1. mybatis配置全局变量
  2. 算法导论读书笔记(7)
  3. BAE3.0还不支持本地写入文件
  4. 诗与远方:无题(十)- 小熊夜游走廊记
  5. Storm对DRPC权限控制Version1.0.1
  6. java -jar命令引导启动Springboot项目的那点事
  7. java final date_Java 8新特性之Date/Time(八恶人-4)
  8. 中imshow函数用法_5 OpenCV几个函数操作实例
  9. 理解eos区块链的eosio.token合约
  10. 妙趣横生的算法--二叉树