一、数据库连接设置
首先需要设置好PHP,确认安装了SQL Server 数据库扩展:
http://www.hanyu123.cn/content-12-132-1.html
在ThinkPHP 配置中设置数据库类型为'sqlsrv':
// 数据库类型 'type' => 'sqlsrv',
数据库编码最好使用utf8:
// 数据库编码默认采用utf8 'charset' => 'utf8',
二、SQL语句书写
读取MySQL中的中文名表格时,可以加``,也可以不加,都能正确读取,例如:
dump(Db::name('hsk词汇等级大纲')->select()); dump(Db::name('`hsk词汇等级大纲`')->select());
读取SQL Server 时则不能加``,或者使用[]:
dump(Db::name('hsk词汇等级大纲')->select()); dump(Db::name('[hsk词汇等级大纲]')->select());
中文字段名也是如此。
三、中文乱码问题的解决
如果设置了utf8编码,读取中文字段时,v值可以正常显示,但k值还是中文乱码:
读取MySQL数据库的中文名数据表和中文字段时,k值和v值都可以正确显示。
但即使SQL Server 是utf8编码,k值也还需要在程序中再转码一次:
$result=$this->toutf8($result); //转码函数 public function toutf8($Result){ $Row=array(); $key1=array_keys($Result); $key2=array_keys($Result[$key1[0]]); foreach ($key2 as $k=>$v){ $key2[$k]=iconv('gbk', 'utf-8', $v); } foreach ($Result as $k=>$v){ $value1=array_values($v); $Row[$k]=array_combine($key2, $value1); } return $Row; }
参考资料:
http://www.thinkphp.cn/topic/39279.html