【问题标题】:Recover original data saved as "???????" from mysql database [duplicate]恢复保存为“?????????”的原始数据来自mysql数据库[重复]
【发布时间】:2018-01-19 14:20:50
【问题描述】:

将信息保存到数据库字段时,设置如下:

character set: latin1
collation: latin1_swedish_ci

用户更新信息后,我发现很多信息被保存为“???????????????????????????????? ?????????” (问号)到数据库。 英语(语言)信息保存时没有问号。 所有其他语言都用问号保存。

现在我已将字符集更改为 utf8 并且所有语言都已正确保存。

问题是我需要恢复保存为问号的信息。 如:“??????????????????????????????????????????”

XAMPP 版本:5.6.19
Navicat 11.0.17 版

数据库服务器
服务器版本:10.1.10-MariaDB - mariadb.org 二进制分发版

网络服务器
Apache/2.4.17 (Win32) OpenSSL/1.0.2d PHP/5.6.19 PHP版本:5.6.19

phpMyAdmin
版本信息:4.5.1

请帮我获取原始数据。

【问题讨论】:

  • 你的意思是正方形中的问号吗?还是像你写的普通问号?
  • 是的,示例中给出的普通问号
  • 好吧...对不起,但两者之间没有区别吗?和?...而且我认为没有记录任何后数据。好像您丢失了这些数据...

标签: php mysql codeigniter phpmyadmin


【解决方案1】:

MySQL 在将这些字符插入数据库时​​将它们替换为问号。原始数据永远丢失了——无法恢复。

【讨论】:

    【解决方案2】:

    检查您的 php/apache/codeigniter 日志中的数据库插入/更新 - 也许您会在那里找到插入的原始数据。

    【讨论】:

      【解决方案3】:

      发生这种情况是因为数据库排序规则。在这种特殊情况下,它是latin1_swedish_ci

      实际上,排序规则是一组字符,可用于数据库中表的字段。 如果您尝试使用不在此排序规则的字符集中的字符,MySQL 会用问号替换它,因为它不知道该字符是什么。

      话虽如此,但没有办法取回您的数据。 唯一的方法是扫描应用程序或 MySQL(如果有)的一些日志。

      【讨论】:

        【解决方案4】:

        您必须在排序集类型中选择 UTF-8_general_ci 编码。

        不是latin1_swedish_ci

        【讨论】:

          【解决方案5】:

          我认为有一种方法可以通过mysqli::query 从数据库中获取数据并使用 mysqli::set_charset 在选择之前(也许您需要多次尝试使用不同的字符集,例如 utf-8,....)然后您可以拥有原始数据数组,然后更改您的表和数据库 collat​​ion 毕竟保存数据。

          【讨论】:

            猜你喜欢
            • 2017-10-15
            • 1970-01-01
            • 1970-01-01
            • 2010-12-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-02-15
            • 2010-09-12
            相关资源
            最近更新 更多