更新的问题:
我有一个带有mysql 5.5.46的旧脚本。我将我的文本存储在一个blob类型的columnt中。我的文字是这样的波斯语:سلامخوبیجهخبر。
经过一个月的时间,我将blob列更改为带有gui的phpmyadmin的longblob列(没有任何转换查询)。
一切正常,但我从我的mysql备份并在2年后恢复此数据库。现在它没有正确显示我的波斯字符。英文文本没问题,但波斯语文字就像我在问题中提到的十六进制一样。
我需要将此文本存储在此表的page_about
和page_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的菜单中查看我的文字;
答案 0 :(得分:1)
有4个地方可以&#34;说&#34; UTF8:
SET NAMES utf8
或同等资格。 (你在new PDO
中处理了这个问题。)CHARACTER SET utf8
。请提供`SHOW CREATE TABLE,但如果说latin1,请不要尝试修复它。<meta ... charset=UTF-8 ...>
请提供SELECT col, HEX(col) FROM tbl WHERE ...
,以便我们可以查看数据是否在表格中搞砸了。有两种可能的数据修复方法;我们需要查看十六进制以了解要应用的修复程序。
答案 1 :(得分:-2)
我也遇到了同样的问题,主要原因是windows对不同的字符集使用不同类型的字符编码。我找到了包convert character set。它解决了我的问题,也可以解决你的问题。