SQL server不支持utf8 php却用utf8的矛盾问题解决方法
核心代码
functionconvert2utf8($string) { returniconv("gbk","utf-8",$string); } functionconvert2gbk($string) { returniconv("utf-8","gbk",$string); }
当插入数据,或修改数据的时候,把utf-8,转为gbk,存入数据库。
当获取数据的时候,将数据转为utf-8。
这个方法在底层的数据中设计,上层调用即可。
getAdapter(); } publicfunctiongetData($table,$where=false,$order='idASC',$pagesize=false,$offset=false,$count=false,$from=false,$join=false,$group=false){ $db=&$this->getAdapter(); $select=$db->select(); if($where&&is_array($where)){ foreach($whereas$key=>$val){ //print_r($where); if($val['type']==1){ $select->where($key,$val['val']); }else{ $select->orwhere($key,$val['val']); } } } if(!$from) $from='*'; //echo$select."
"; if($pagesize){ $select->limit($pagesize,$offset); } //echo$select."
"; if(is_array($order)){ foreach($orderas$value){ $select->order($value); } }else{ $select->order($order); } //echo$select."
"; $select->from($table,$count?"COUNT(".$table.".id)":$from); if(is_array($group)){ foreach($groupas$key=>$val){ $select->group($val); } if($count){ $result=$db->fetchAll($select); //echo$select."
"; return$result; } }else{ if($count){ $result=$db->fetchOne($select); //echo$select."
"; return$result; } } if(is_array($join)){ foreach($joinas$key=>$val){ $select->join($key,$val[0],$val[1]); } } //echo$select."
"; //echo$select;exit; $result=$db->fetchAll($select); foreach($resultas$key=>$value){ foreach($valueas$key2=>$value2){ $result[$key][$key2]=$this->convert2utf8($value2); } } return$result; } /** *向表中插入数据 *array$adata数据 *string$table表名 *int$insterid是否需要返回插入ID *@returntrueorfalseorint */ //@bianding2013.11.04更改了pdo中mssql.php的lastInsertId()函数 //@bianding2013.11.04经测试mssql.php中的lastInsertId()函数中的SELECT两种方式都行 functionSaveData($adata,$table,$insterid=0,$aLog=false){ $db=&$this->getAdapter(); foreach($adataas$key=>$value){ $adata[$key]=$this->convert2gbk($value); } if($db->insert($table,$adata)){ //var_dump($db->getProfiler()); $insertedID=$db->lastInsertId(); if($insterid){ return$insertedID; }else{ returnTRUE; } }else{ returnfalse; } } /** *删除表中数据 * *@paramstring$table表名 *@paramstring$where'id='.$id条件 *@returntrueorfalse */ functionDelData($table,$where,$aLog=false){ $db=&$this->getAdapter(); if($db->delete($table,$where)){ returnTRUE; }else{ returnFALSE; } } /** *更新表中数据 * *@paramstring$table *@paramarray$adata *@paramstring$where'id='.$id *@returntrueorfalse */ functionUpdateData($table,$adata,$cond,$aLog=false){ $db=&$this->getAdapter(); foreach($adataas$key=>$value){ $adata[$key]=$this->convert2gbk($value); } if($db->update($table,$adata,$cond)){ returnTRUE; }else{ returnfalse; } } publicfunctionclearTable($table){ $db=&$this->getAdapter(); $result=$db->query('TRUNCATETABLE'.$table); } publicfunctionexecuteSql($strSql){ $db=&$this->getAdapter(); $result=$db->query($strSql); } functionconvert2utf8($string) { returniconv("gbk","utf-8",$string); } functionconvert2gbk($string) { returniconv("utf-8","gbk",$string); } }
sqlserver建库指定utf-8修改库为utf-8编码
CREATEDATABASEpaasCOLLATEChinese_PRC_CI_AS
GO
ALTERDATABASEpaasCOLLATEChinese_PRC_CI_AS
GO
让ASP和MSSQLSERVER支持UTF-8编码存储多国语言文字
近日在ASP+MSSQL存储UTF-8编码内容的时候,出现乱码的情况,经过查询发现要使SQLSERVER支持UTF-8编码格式,必须做一些修改才可以。
1、确保ASP页面是UTF-8编码的,并在ASP页面顶部声明中使用<%@LANGUAGE=VBScriptCodePage=65001%>进行编码声明
2、输出的HTML页面中声明字符集:
3、在进行URL参数传递的时候,要使用Server.URLEncode()方法进行编码
4、使用JS进行URL参数传递中文的时候,要使用escape进行编码
5、在将UTF-8编码的内容存入SQLSERVER数据库中的时候,要存储的字段必须设置为NVARCHAR类型,SQL语句要在内容前加N表示,如insertintouser(name)values(N´&username&´),除id意外的字段都需要加N。