mySQL数据从php5.2迁移到php7



我们有一个非常旧的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中不起作用,这怎么可能?

在dsn中指定字符集,例如

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

phphttp://mysql.rjweb.org/doc.php/charcoll

更多关于Mojibake: UTF-8字符的问题;我看到的不是我存储的

最新更新