在phpmyadmin输入数据后 通过Navicat for MYSQL 打开表后有数据的地方都显示BLOB 并且在Navicat 下无法插入数据。
PHP输出后乱码
在phpadmin中可以插入数据,显示正常
注:PHP中加了header('content-type;text/html;charset=utf-8');问题依旧
请问各位为什么呢?如何解决
谢谢

解决方案 »

  1.   

    mysql_query("SET NAMES 'utf8'");
    呢?数据库编码是utf8吗?
      

  2.   


    是的。
    我是从PHPMYADMIN里插入的数据 在Navicat 里显示BLOB  ,在PHP里输出显示??????
    不知道怎么回事
      

  3.   

    哦,以前遇過這樣的問題。不知這代碼對你是否有幫助。CREATE DATABASE `testing` ;CREATE TABLE `testing`.`tb_test` (
    `id` INT( 255 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `name` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL 
    ) ENGINE = MYISAM 
    INSERT INTO `testing`.`tb_test` (
    `id` ,
    `name` 
    )
    VALUES (
    NULL , '你好,我是俊。'
    );
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
    </head>
    <body>
    <?
    $hostname_mydatabase = "localhost";
    $database_mydatabase = "testing";
    $username_mydatabase = "root";
    $password_mydatabase = "";
    $mydatabase = mysql_pconnect($hostname_mydatabase,$username_mydatabase,$password_mydatabase) or trigger_error(mysql_error(),E_USER_ERROR);
    mysql_select_db($database_mydatabase,$mydatabase);$selectSQL="select * from tb_test where id='1'";
    $resultSQL=mysql_query($selectSQL);
    mysql_query("SET NAMES 'utf8'");
    $rowSQL=mysql_fetch_object($resultSQL);echo $rowSQL->name;?>
    </body>
    </html>
      

  4.   

    确保php, mysql, 页面全部配成utf-8字符集。应该没什么问题。
      

  5.   

    不要从PHPMYADMIN里插入或更新数据。
    有的版本的PHPMYADMIN里插入数据可能不会以和该数据库相同的编码插入或更新。
    比如数据库是utf8的编码,用PHPMYADMIN插入或更新的可能是gb2312或lantin1什么的。再就是在PHPMYADMIN查看你表的结构表和字段后的“整理”项里显示的编码是否是utf8的?
    关键是字符型的字段。不是的话,就把这些字段的编码改为utf8_general_ci
      

  6.   

    我以前也遇到过这种问题
    主要是你编码时的格式要为utf-8,数据库建立时也要选择相应的utf-8。
    再者是你在编码连接数据库时,先发给“set names 'utf8'”这个信息给数据库
    这样之后应该不会有问题,建议LZ试下
      

  7.   

    mysqldump 表结构出来及 mysql-server 的版本。mysql5的话,数据库存储字符集和页面字符集不一定要一至,但申请和数据库通信的字符集要与实际给的要一至,数据库自行进行匹配
      

  8.   

    http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/12/4174186.aspx
    MySQL 中文显示乱码
      

  9.   

    PHPMYADMIN 导出sql里面有没乱码啊? 有的话可以用 editplus 转下编码, 没乱码了再导入..
    如果 没乱码就是你PHP读的时候编码没对了! 一半乱码一半正常的话那你就个别处理了!
      

  10.   

    问题已经解决了,是BOM引起的
    谢谢大家的热情帮助!!!
    找到个小程序,可以批量去除BOM头信息,分享:<?php
    //把该文件放到WEB根目录下,运行一次可以清除当前目录及所有子目录中所有文件的BOM Header。
    //经测试,安全。
    if (isset($_GET['dir'])){ //设置文件目录
    $basedir=$_GET['dir'];
    }else{
    $basedir = '.';
    }
    $auto = 1;
    checkdir($basedir);
    function checkdir($basedir){
    if ($dh = opendir($basedir)) {
      while (($file = readdir($dh)) !== false) {
       if ($file != '.' && $file != '..'){
        if (!is_dir($basedir."/".$file)) {
         echo "filename: $basedir/$file ".checkBOM("$basedir/$file")." <br>";
        }else{
         $dirname = $basedir."/".$file;
         checkdir($dirname);
        }
       }
      }
    closedir($dh);
    }
    }
    function checkBOM ($filename) {
    global $auto;
    $contents = file_get_contents($filename);
    $charset[1] = substr($contents, 0, 1);
    $charset[2] = substr($contents, 1, 1);
    $charset[3] = substr($contents, 2, 1);
    if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) {
      if ($auto == 1) {
       $rest = substr($contents, 3);
       rewrite ($filename, $rest);
       return ("<font color=red>BOM found, automatically removed.</font>");
      } else {
       return ("<font color=red>BOM found.</font>");
      }
    }
    else return ("BOM Not Found.");
    }
    function rewrite ($filename, $data) {
    $filenum = fopen($filename, "w");
    flock($filenum, LOCK_EX);
    fwrite($filenum, $data);
    fclose($filenum);
    }
    ?>