备份和还原后的blob文本

时间:2015-12-17 18:15:22

标签: php mysql utf-8 phpmyadmin blob

更新的问题:

我有一个带有mysql 5.5.46的旧脚本。我将我的文本存储在一个blob类型的columnt中。我的文字是这样的波斯语:سلامخوبیجهخبر。 经过一个月的时间,我将blob列更改为带有gui的phpmyadmin的longblob列(没有任何转换查询)。 一切正常,但我从我的mysql备份并在2年后恢复此数据库。现在它没有正确显示我的波斯字符。英文文本没问题,但波斯语文字就像我在问题中提到的十六进制一样。 我需要将此文本存储在此表的page_aboutpage_contact列中: 创建表:

    mysql_query("CREATE TABLE `".$prefix."ProFolio_info` (
                      `id` int(5) NOT NULL auto_increment,
                      `page_about` blob NOT NULL,
                      `page_contact` blob NOT NULL,
                      PRIMARY KEY  (`id`)
                    ) TYPE=MyISAM AUTO_INCREMENT=1") or die(mysql_error());

更新数据:

$info_query = mysql_query("SELECT * FROM ".$prefix."ProFolio_info ORDER BY id DESC LIMIT 0,10");

   while($info_row = mysql_fetch_array($info_query)){
        $about_page = html_entity_decode($info_row['page_about']);
        $contact_page = html_entity_decode($info_row['page_contact']);

    if(isset($_POST['change_settings']) && $LOGGEDIN == 'yes'){

    $new_aboutpage = clean_page($_POST['about_page']);
    $new_contactpage = clean_page($_POST['contact_page']);


    if($about_page != $new_aboutpage){
        mysql_query("UPDATE ".$prefix."ProFolio_info SET page_about = '$new_aboutpage' WHERE id = '$info_id'");
    }
    if($contact_page != $new_contactpage){
        mysql_query("UPDATE ".$prefix."ProFolio_info SET page_contact = '$new_contactpage' WHERE id = '$info_id'");
    }

从DB获取文本:

 <textarea name="contact_page"><? echo str_replace('<br />', '', $contact_page); ?></textarea> 
 </div>

我测试了一些像cast和convert这样的查询并将列转换为longtest但是结果是相同的,我的错误字符。

我认为它存储了latin1整理但我选择了utf-8

HEX

BC28620264F736C6173683B26756D6C3B264F736C6173683B26736563743B265567726176653BC284264F736C6173683B26736563743B20265561637574653B266D6163723B265567726176653BC281264F736C6173683B266F7264663B265567726176653BC28520264F736C6173683B26736563743B2655636972633BC28C265567726176653BC286264F736C6173683B266E6F743B264F736C6173683B26736563743B20265567726176653BC286265567726176653BC2852655636972633BC28C265561637574653B266D6163723B265567726176653BC286264F736C6173683B266E6F743B265567726176653BC28720264F736C6173683B26736563743B265567726176653BC285264F736C6173683B26736563743B20265567726176653BC285264F736C6173683B26737570333B265567726176653BC286265561637574653B26636F70793B265567726176653BC28720265561637574653B266D6163723B265567726176653B

我上传了我的脚本in github 还在我的服务器上传了脚本并从脚本发送文本,但数据正确地转到db!我认为这只是因为我的数据库备份。 你可以从here查看我的准备好的脚本,并从kave note的菜单中查看我的文字;

2 个答案:

答案 0 :(得分:1)

有4个地方可以&#34;说&#34; UTF8:

  1. 客户端中的数据必须是utf8编码的。 (可能是。)
  2. SET NAMES utf8或同等资格。 (你在new PDO中处理了这个问题。)
  3. 表格或列声明中的
  4. CHARACTER SET utf8。请提供`SHOW CREATE TABLE,但如果说latin1,请不要尝试修复它。
  5. 在html页面上<meta ... charset=UTF-8 ...>
  6. 请提供SELECT col, HEX(col) FROM tbl WHERE ...,以便我们可以查看数据是否在表格中搞砸了。有两种可能的数据修复方法;我们需要查看十六进制以了解要应用的修复程序。

答案 1 :(得分:-2)

我也遇到了同样的问题,主要原因是windows对不同的字符集使用不同类型的字符编码。我找到了包convert character set。它解决了我的问题,也可以解决你的问题。