一、原因
我在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 odbc_connect(和PDO odbc)下,odbc显然使用Windows区域设置来处理来自MS access和MS SQL Server数据库的输入和输出。
如果使用的不是ASCII字符,这会导致很多麻烦。
utf8_encode和mb_convert等变通解决方案都失败了。
我的解决方案是对Windows执行以下更改
控制面板>区域>管理>更改系统区域设置>选中“使用Unicode UTF-8获得全球语言支持”</i> “是的
解决方法 二:
使用iconv()转码后处理插入的信息和查询的结果
$sql="select * from session where sess_id='中国'";
$sql=iconv('UTF-8', 'GBK', $sql);
解决方法 三:
修改work space编码集,改成默认GBK,非UTF-8,
工具是eclipse php路径是
windows-》preferences-》workspace