【问题标题】:Migrate mySQL data from php5.2 to php7将 mySQL 数据从 php5.2 迁移到 php7
【发布时间】:2021-05-15 20:56:16
【问题描述】:

我们有一个非常古老的代码库,其中包含php5.2,其中一些甚至在php3 中使用mysql 5.1,我们正在尝试迁移到laravel 7/8。数据库中存储的数据是日文字符,使用latin1编码存储为,

  • ¥í¥°¥¤¥óÀ®¸ù
  • ¥í¥°¥¢¥¦¥È
  • ¥á¡¼¥ë¥¢¥É¥ì¥¹Êѹ¹

这些数据在使用 php5.2 时显示正确,并且在当前代码库中运行良好,但是当我尝试使用 php5.2 以外的任何版本访问该数据时,我无法获得正确的值。

我尝试过但没有成功的方法。

  • 在php文件中用header更改了文件编码。
  • 用mb_convert_encoding更改了字符串编码。
  • 将php.ini 中的default_charset 设置为空字符串。

但似乎没有一个解决方案有效。有没有其他方法可以正确显示这些数据?

$dsn = 'mysql:dbname=dbname;host=127.0.0.1;port=3306';
$user = 'root';
$password = '';
$db = new PDO($dsn, $user, $password);
$query = $db->prepare('SELECT * FROM tablename');
if ($query->execute()) {
    echo '<ul>';
    while ($row = $query->fetch()) {
        echo '<li>' . $row['column_name'] . '</li>';
    }
    echo '</ul>';
}

相同的代码块使用php5.2在浏览器中显示正确的数据,但在php7.3中不起作用,这怎么可能?

【问题讨论】:

  • this info 可能有帮助吗?涉及很多。
  • 问题是,我已经有了需要转换的现有数据,以便它们能够使用较新版本的PHP,而不是建立一个全新的环境。
  • @LalitThapa 您如何看待使用utf8mb4 ạ创建一个新数据库并导入现有数据?
  • 是的,我已经尝试过了,但在较新版本的 PHP 上也有同样的问题。

标签: mysql laravel encoding php-7.3 php-5.2


【解决方案1】:

在 dsn 中指定字符集,类似于

$db = new PDO('dblib:host=host;dbname=db;charset=utf8mb4', $user, $pwd);

http://mysql.rjweb.org/doc.php/charcoll#php

更多关于 Mojibake:Trouble with UTF-8 characters; what I see is not what I stored

【讨论】:

    猜你喜欢
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-10
    • 2012-05-14
    • 2011-02-17
    • 2017-09-30
    相关资源
    最近更新 更多