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。