我有个表,里面的某个字段是默认的latin1_swedish那个编码,忘记改成utf8了。
写入了数据后,才发现都变成了??的乱码(用phpmyadmin看的)
这些历史数据很重要,怎么才能恢复原先别人录入的内容?

解决方案 »

  1.   

    先导出来备份。然后把字符集改成utf8编码试试。
      

  2.   

    首先把数据做备份,然后修改表的字符集 set default character 'utf_8';
      

  3.   

    我已经修改为utf-8了,新的数据已经都是正常的中文了,我想知道的是历史的那些怎么恢复或者导出?
      

  4.   

    你没备份就修改了? 那改回去或者gbk呢? 
      

  5.   

    没备份就修改成utf-8了
    改回latin1会导致历史数据继续是??之类,新数据也变成??所以我觉得只是展现形式问题,真正的数据应该还是在数据库内的。
      

  6.   

    那你取出来看看。dos命令行或程序都行。
      

  7.   

    先以 latin1 导出,看一下字符正否正常。
      

  8.   

    怎么给取出呢?我用phpmyadmin不管怎么看都是问号??
      

  9.   

    查询啊。dos命令下或者php程序取出来看正常吗
      

  10.   

    我试过了,用php写了个select程序,取出来的依然是??乱码。
    我先用utf-8编码的文件,写了set names utf8,取出来乱码。
    然后把set names utf8删除,依然乱码。
    然后把set names utf8改成set names latin1,依然乱码。
    然后把文件编码改成ansi,依然乱码。
    无奈了.........
      

  11.   

    select hex(字段) from tbname看看是否有3f 如果有  则代表存储的本身就是问号  无法转变了已经
      

  12.   

    我按照你说的执行了这个查询,输出结果是
    3F3F3F : 3F3F3F3F3F3F3F3F3F3F3F3F33303F3F3F3F3F4636
    我冒号前后各是一个字段,我select hex(truename) as truename,hex(address) as address from tea order by id asc
    按照你推断,我现在存在数据库内的已经是问号,没救了?
      

  13.   

    有binary日志否,找找日志看看。吧那个表的相关操作全部提取出来看看应该都是中文的。然后整理下,如果你的日志完善的话应该不会丢太多的历史数据。
      

  14.   

    我出现过这个问题,只要在你的安装文件夹里找到my.imi文件,把里面的default-character-set=gb2312后面改成你要的就行了。你注意看一下,里面有两个这样的语句。