当前位置:首页 > PHP教程 > php高级应用 > 列表

SQL server不支持utf8 php却用utf8的矛盾问题解决方法

发布:smiling 来源: PHP粉丝网  添加日期:2022-02-19 09:40:49 浏览: 评论:0 

这篇文章主要介绍了SQL server不支持utf8 php却用utf8的矛盾问题解决方法,需要的朋友可以参考下。

核心代码

  1. function convert2utf8($string
  2.   { 
  3.     return iconv("gbk","utf-8",$string); 
  4.   } 
  5.   function convert2gbk($string
  6.   { 
  7.     return iconv("utf-8","gbk",$string); 
  8.   } 

当插入数据,或修改数据的时候,把utf-8,转为gbk,存入数据库。

当获取数据的时候,将数据转为utf-8。

这个方法在底层的数据中设计,上层调用即可。

  1. <?php 
  2. class dao_dao extends Zend_Db_Table { 
  3.  
  4.   public function returnDb(){ 
  5.     return $db = &$this->getAdapter(); 
  6.   } 
  7.  
  8.   public function getData($table,$where = false, $order = 'id ASC'$pagesize = false, $offset = false, $count = false, $from = false, $join = false, $group = false) { 
  9.     $db = &$this->getAdapter(); 
  10.     $select = $db->select(); 
  11.       
  12.     if ($where && is_array($where)) { 
  13.       foreach ($where as $key => $val) { 
  14.         //print_r($where); 
  15.         if($val['type']==1){ 
  16.           $select->where($key$val['val']); 
  17.         }else
  18.           $select->orwhere($key$val['val']); 
  19.         } 
  20.           
  21.       }  
  22.     } 
  23.  
  24.     if (!$from
  25.       $from = '*'
  26.     //echo $select."<br/>"; 
  27.     if ($pagesize) { 
  28.       $select->limit($pagesize$offset); 
  29.     } 
  30.     //echo $select."<br/>"; 
  31.     if (is_array($order)) { 
  32.       foreach ($order as $value) { 
  33.         $select->order($value); 
  34.       } 
  35.     } else { 
  36.       $select->order($order); 
  37.     } 
  38.     //echo $select."<br/>"; 
  39.     $select->from($table$count ? "COUNT(".$table.".id)" : $from); 
  40.       
  41.     if (is_array($group)) { 
  42.       foreach ($group as $key => $val) { 
  43.         $select->group($val); 
  44.       } 
  45.  
  46.       if ($count) { 
  47.         $result = $db->fetchAll($select); 
  48.         //echo $select."<br/>"; 
  49.         return $result
  50.       } 
  51.     } else { 
  52.       if ($count) { 
  53.         $result = $db->fetchOne($select); 
  54.         //echo $select."<br/>"; 
  55.         return $result
  56.       } 
  57.     } 
  58.     if (is_array($join)) { 
  59.       foreach ($join as $key => $val) { 
  60.         $select->join($key$val[0], $val[1]); 
  61.       } 
  62.     } 
  63.  
  64.     //echo $select."<br/>"; 
  65.  
  66.     //echo $select;exit; 
  67.       
  68.     $result = $db->fetchAll($select); 
  69.     foreach ($result as $key => $value) { 
  70.       foreach ($value as $key2 => $value2) { 
  71.         $result[$key][$key2] = $this->convert2utf8($value2); 
  72.       } 
  73.     } 
  74.     return $result
  75.   } 
  76.     
  77.   /** 
  78.    * 向表中插入数据 
  79.    * array $adata 数据 
  80.    * string $table 表名 
  81.    * int $insterid 是否需要返回插入ID 
  82.    * @return true or false or int 
  83.    */ 
  84.    // @bianding 2013.11.04 更改了pdo中mssql.php的lastInsertId()函数 
  85.    // @bianding 2013.11.04 经测试 mssql.php中的lastInsertId()函数中的SELECT两种方式都行 
  86.   function SaveData($adata$table$insterid = 0, $aLog = false) { 
  87.     $db = & $this->getAdapter(); 
  88.     foreach ($adata as $key => $value) { 
  89.       $adata[$key] = $this->convert2gbk($value); 
  90.     } 
  91.     if ($db->insert($table$adata)) { 
  92.       //var_dump($db->getProfiler()); 
  93.       $insertedID = $db->lastInsertId();       
  94.       if ($insterid) { 
  95.         return $insertedID
  96.       } else { 
  97.         return TRUE; 
  98.       } 
  99.     } else { 
  100.       return false; 
  101.     } 
  102.   } 
  103.  
  104.   /** 
  105.    * 删除表中数据 
  106.    *  
  107.    * @param string $table 表名 
  108.    * @param string $where 'id ='.$id 条件 
  109.    * @return true or false 
  110.    */ 
  111.   function DelData($table$where$aLog = false) { 
  112.     $db = & $this->getAdapter(); 
  113.     if ($db->delete($table$where)) { 
  114.       return TRUE; 
  115.     } else { 
  116.       return FALSE; 
  117.     } 
  118.   } 
  119.  
  120.   /** 
  121.    * 更新表中数据 
  122.    * 
  123.    * @param string $table 
  124.    * @param array $adata 
  125.    * @param string $where 'id ='.$id 
  126.    * @return true or false 
  127.    */ 
  128.   function UpdateData($table$adata$cond$aLog = false) { 
  129.     $db = & $this->getAdapter(); 
  130.     foreach ($adata as $key => $value) { 
  131.       $adata[$key] = $this->convert2gbk($value); 
  132.     } 
  133.     if ($db->update($table$adata$cond)) { 
  134.       return TRUE; 
  135.     } else { 
  136.       return false; 
  137.     } 
  138.   } 
  139.  
  140.  
  141.   public function clearTable($table) { 
  142.     $db = &$this->getAdapter(); 
  143.     $result = $db->query('TRUNCATE TABLE ' . $table); 
  144.   } 
  145.  
  146.   public function executeSql($strSql) { 
  147.     $db = &$this->getAdapter(); 
  148.     $result = $db->query($strSql); 
  149.   } 
  150.     
  151.   function convert2utf8($string
  152.   { 
  153.     return iconv("gbk","utf-8",$string); 
  154.   } 
  155.   function convert2gbk($string
  156.   { 
  157.     return iconv("utf-8","gbk",$string); 
  158.   } 

sqlserver 建库指定utf-8 修改库为utf-8编码

CREATE DATABASE paas COLLATE Chinese_PRC_CI_AS

GO

ALTER DATABASE paas COLLATE Chinese_PRC_CI_AS

GO

让ASP和MS SQL SERVER支持UTF-8编码存储多国语言文字

近日在ASP+MS SQL存储UTF-8编码内容的时候,出现乱码的情况,经过查询发现要使SQL SERVER支持UTF-8编码格式,必须做一些修改才可以。

1、确保ASP页面是UTF-8编码的,并在ASP页面顶部声明中使用<%@ LANGUAGE = VBScript CodePage = 65001%>进行编码声明

2、输出的HTML页面中声明字符集:<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

3、在进行URL参数传递的时候,要使用Server.URLEncode()方法进行编码

4、使用JS进行URL参数传递中文的时候,要使用escape进行编码

5、在将UTF-8编码的内容存入SQL SERVER数据库中的时候,要存储的字段必须设置为NVARCHAR类型,SQL语句要在内容前加N表示,如insert into user (name) values (N´&username&´),除id意外的字段都需要加N。

Tags: SQLserver utf8-php

分享到: