mysql_query('set names utf8');
  //测试插入中文
  mysql_query('insert into test(`comment`) values(\'我是坏人\')' );
  //读出中文
 $rs=mysql_query('select comment from test order by id asc limit 1');
  $data=mysql_fetch_array($rs,MYSQL_ASSOC);
  print_r($data);表test的字段comment 的编码是latin1_general_ci问题是: 
         每次我插入的中文数据读出来的都是问号?????????????
如果删除mysql_query('set names utf8'); 问题同样存在。
如果改成 mysql_query('set names latin1');读写就没问题了。我想知道的是 是不是就是这样的。
还是我什么没设置好。导致以utf8格式将数据保存到latin编码的字段里的都是问号

解决方案 »

  1.   

    为神马不把 表test的字段comment 的编码 统一UTF8
      

  2.   

    我现在工作就是将所有表中字段不为utf8_general_ci 的编码改过来在改的过程中我法相上述问题如果上面我提问的答案就是第一种   '本来就是这样的' 那么我的工作就是直接使用alter talbe 命令修改所有表的编码就可以了。不用考虑转换的事
      

  3.   

    既然你不想用utf8作数据库编码,那你存的时候为啥用mysql_query('set names utf8');
    存读取数据(数据库)与页面文件和浏览器不一致将导致中文乱码
      

  4.   


    大哥,不是我想,是网站代码本来就这样的我现在基本能确定,数据库中使用latin1的字段存入的非英文编码数据已经损坏了。
      

  5.   

    mysql_query('set names xxx');意思是以xxx编码格式向数据库里面添加,而你的数据库是ooo,所以就乱码了
      

  6.   

    将表内的数据读出之后 修改表的编码为 utf8 将读出的数据再重新更新回去就是了 没那么多好纠结的.
      

  7.   

    mysql_query("SET NAMES 'utf8'");
    第一句应该是这样的吧
    还要你的数据库表也是utf-8的
      

  8.   

      谢谢各位了。
      现在问题已经解决了。确定写入数据库中latin1字段的非英文编码数据都是顺坏的。读出来的都是问号。
      
      现在总结下,各位看下是否有误。
      mysql默认编码是utf8 所以如果不使用 mysql_query('set names latin1');//这里我默认为latin1。那你 写入数据库中latin1编码字段非英文损坏,不可恢复。
      所以我修改数据库编码很放心的用一条命令解决。很省心,省事
       
       define('SERVER', 'localhost');
    define('SERVER_USERNAME', 'root');
    define('SERVER_PASSWORD', 'root');
    define('SERVER_DATABASE', 'teststructrue');$db = mysql_connect(SERVER,SERVER_USERNAME,SERVER_PASSWORD) or die (mysql_error());mysql_select_db(SERVER_DATABASE,$db) or die (mysql_error());//teststructrue$table_list = mysql_query('show tables');while($table = mysql_fetch_array($table_list,MYSQL_NUM)){
    $ts = mysql_query("ALTER TABLE `".$table[0]."` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci");
    if(!$ts) {
    updateBaseLog('table_error:`'.$table[0].'`--'.mysql_error());
    }
    }mysql_query("ALTER DATABASE `".SERVER_DATABASE."` CHARACTER SET utf8 COLLATE utf8_general_ci");function updateBaseLog($info){
    file_put_contents('updateBase.log', $info."\n", FILE_APPEND);
    }
       
      

  9.   

    用latin1编码从数据库里读出来先,不能用utf8读
      

  10.   

    你要明白原先已经使用UTF8写进数据库的。现在用上面读都不行了。写入,读出的都是 问号  ??