我在php中使用odbc连接mssql server时,在列名为英文,返回数据也为英文时一切正常。
但如果列名出现中文,会提示SQL state 07001参数缺少或者SQL state 37000错误。如果返回数据中存在中文则为乱码。
这一情况实际上正是编码的问题。
在windows下对不支持unicode utf-8编码的程序,会默认使用GBK编码,而实际上ODBC在php实现内貌似是不支持utf-8的,因为utf-8编码的字符串提交给ODBC无法执行。
因此解决方案就很明了了,直接修改字符串编码转码为GBK,或者设置windows非unicode编码(设置->时间和语言->语言->管理语言设置->更改系统区域设置->勾选使用UTF-8提供全球语言支持 重启即可)
另外还有一点需要注意,是我最近在一个项目中遇到的。如果客户本地环境在台湾,香港,澳门等默认windows是使用的是繁体字符,编码就不再是GBK而是Big5了。这一点折磨了我2天,记录一下希望帮到别人。