php - 通过远程数据库连接 utf8 与本地连接返回的字符不同

标签 php mysql utf-8

我正在尝试通过远程 mysql 数据库连接检索外语 UTF8 数据。当我远程检索数据时,utf8 在浏览器中无法正确显示。但是,当我通过本地数据库连接检索数据时,无论是在实时站点上还是在本地测试机上,字符都在浏览器中正确显示。

我的远程连接是从wamp本地服务器到在线直播网站。

对于我设置的每个页面:

header('Content-Type: text/html; charset=utf-8');

我还尝试设置 UTF-8 元标记。我还在 .htaccess 中指定了 UTF8 作为默认字符集。

这是一个较旧的网站,所以我仍在使用 mysqli。我也尝试过设置:

$mysqli->set_charset("utf8");

例如,通过远程连接 Français 将显示为 Français。

我不知道该怎么办。我花了几个小时试图弄清楚,但无济于事。我知道索要代码是常态,但代码太多,我无法将其全部包含在这里。

谢谢!

最佳答案

你的解决方案是:在远程数据库上,the data is encoded to utf8 twice ,这会产生不正确的结果。你的代码没有问题,数据库有问题。您可以在那里修复它(如果它是 varchar,首先进行备份!):首先将其转换为 latin1,然后转换为二进制,然后转换为 utf8。一个有效的 sql fiddle 向您展示 here 是如何的,我也会将代码粘贴到此处,以防 sqlfiddle 将来将其删除:

-- database column correctly defined as utf8
CREATE TABLE base (col VARCHAR(128) CHARSET utf8);
-- wrong data is entered:
INSERT INTO base SELECT UNHEX('4672616EC383C2A7616973');
-- first, convert back to latin-1, we have now proper utf-8 data, but in a latin1 column
ALTER TABLE base MODIFY COLUMN col VARCHAR(128) CHARSET latin1;
-- convert to binary first, so MySQL leaves the bytes as is without conversion
ALTER TABLE base MODIFY COLUMN col VARBINARY(128);
-- then convert to the proper character set, which will leave the bytes once again intact
ALTER TABLE base MODIFY COLUMN col VARCHAR(128) CHARSET utf8;

关于php - 通过远程数据库连接 utf8 与本地连接返回的字符不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16945436/

相关文章:

php - 从实体对象 symfony 2 调用学说

php - 使用 Smarty PHP 模板构建移动网站

php - 如何检测非西方字符?

Python Unicode、Pyramid、UTF-8 MySQL 表问题

php - 将多维数组插入mysql

mysql - 将数据库从aws移动到google cloud sql时出现汉字编码错误

php - 使用模糊匹配搜索单个 MySQL 文本列

php - Laravel 中使用 phpunit 拒绝访问数据库

php - Utf8、瑞典字符、Doctrine、Mysql 和 Json 序列化

MySQL Convert latin1 to utf8, cp1252 0x80-0x9F 错误