如何解决将mySQL数据从php5.2迁移到php7
我们有一个非常旧的代码库,其中有 php5.2
,其中一些甚至在 php3
中使用 mysql 5.1
,我们正在尝试迁移到 laravel 7/8
。数据库中存储的数据为日文字符,使用latin1
编码为,
¥í¥°¥¤¥óÀ®¸ù
¥í¥°¥¢¥¦¥È
¥á¡¼¥ë¥¢¥É¥ì¥¹Êѹ¹
这些数据在使用 php5.2
时可以正确显示,并且在当前代码库中工作正常,但是当我尝试使用 php5.2
以外的任何版本访问该数据时,我无法获得正确的值。
我尝试过但没有奏效的事情。
- 在 php 文件中使用
header
更改了文件编码。 - 使用
mb_convert_encoding
更改字符串编码。 - 将
default_charset
中的php.ini
设置为空字符串。
但似乎没有一个解决方案有效。有没有其他方法可以正确显示这些数据?
$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);
http://mysql.rjweb.org/doc.php/charcoll#php
关于 Mojibake 的更多信息:Trouble with UTF-8 characters; what I see is not what I stored
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。