Mysql SELECT两个mysql服务器之间的编码不同[重复]

Mysql SELECT not same encoding between two mysql server [duplicate]

提问人:Etr 提问时间:6/17/2023 更新时间:6/17/2023 访问量:25

问:

我的主机上有本地环境开发 (WAMP) 和生产环境。

出于测试目的,我从主机导出我的数据库并导入到我的本地 WAMP 环境。

我有一个从我的数据库中获取文本并生成 json 文件以供显示的人。

为了显示口音,我必须在 WAMP 环境中使用utf8_decode,而不是在我的主机环境中使用。我检查了有关编码和配置的所有内容,即使我从计算机(开发和生产)重新导入相同的SQL文件,问题仍然存在。

参数 开发
PHPMYADMIN 版本 5.2.0 5.2.1
导出 SQL 文件编码 UFT-8型
导出 SQL 参数 (从 PROD 导入) 数据和结构与删除
导入 SQL 文件编码 UFT-8型
数据库间类化 latin1_swedish_ci latin1_swedish_ci
结构字段排序规则 latin1_swedish_ci latin1_swedish_ci
MYSQL版本 8.0.31 ???
PHP版本 8.0.26 8.0.28
PHP COINFIG default_charset UTF-8 / UTF-8 UTF-8 / UTF-8
WEB服务器 阿帕奇/2.4.54 Apache ???

因此,如果我不在我的函数中使用utf8_decode:

"content": "'.(str_replace($badchar, '',str_replace(array("\r\n","\r","\n"),'<br/>', $data['avis']))).'"

dev: “Région riche en découvertes.” prod: “Région riche en découvertes.”

如果我在我的函数中使用utf8_decode:

“内容”: “'.utf8_decode(str_replace($badchar, '',str_replace(array(”\r\n“,”\r“,”\n“),'
'

dev: “Région riche en découvertes.” prod: “R gion riche en d couvertes.”

我不明白问题来自哪里,apache,mysql,php?

该函数mb_detect_encoding将 UTF-8 两面都返回给我。

功能齐全:

function refresh_json_avis($BDD)
{
    $badchar=array(
    // control characters
    chr(0), chr(1), chr(2), chr(3), chr(4), chr(5), chr(6), chr(7), chr(8), chr(9), chr(10),
    chr(11), chr(12), chr(13), chr(14), chr(15), chr(16), chr(17), chr(18), chr(19), chr(20),
    chr(21), chr(22), chr(23), chr(24), chr(25), chr(26), chr(27), chr(28), chr(29), chr(30),
    chr(31),
    // non-printing characters
    chr(127)
    );
    
    $SiteDataClass = new SiteDataClass($_SERVER['DOCUMENT_ROOT']."/json/config.json");

    $req =$BDD->prepare('select avis, nom, date, appartement FROM reservations WHERE etat>=6 AND avis!="" ORDER BY date DESC, id DESC');
    $req->execute();
    
    $file='[';
    
    while($data = $req->fetch())
    {        
        $array_date=explode('-',$data['date']);

        $file.='{"title": "'.$SiteDataClass->get_flat_name($data['appartement']).', '.$array_date[2].'/'.$array_date[1].'/'.$array_date[0].'","content": "'.utf8_decode(str_replace($badchar, '',str_replace(array("\r\n","\r","\n"),'<br/>', $data['avis']))).'","sign": "'.strtoupper(substr($data['avis'], 0, 1)).'."},';    
    }
    
    $req->closecursor();

    $file = rtrim($file);
    $file = rtrim($file, ",");
    $file.= "]";    
    
    file_put_contents($_SERVER['DOCUMENT_ROOT'].'/json/avis.json', $file);

    return('[{"type":"message","content":"'.mb_detect_encoding($file).'","param":"success"}]'); //debug
    return('[{"type":"message","content":"Mis à jour, cela peut mettre plusieurs minutes à apparaitre","param":"success"}]');
}
php mysql 阿帕奇

评论

1赞 Chris Haas 6/17/2023
与您的问题没有直接关系,但随着时间的推移,它们被严重误解,以至于它们已被弃用,因此我建议避免使用它们,即使它们看起来有效。utf8_decodeutf8_encode
1赞 M. Eriksson 6/17/2023
这回答了你的问题吗?UTF-8 贯穿始终 - 确保在两种环境中都是这种情况。
0赞 Rick James 6/18/2023
有关 ,请参阅“Mojibake”。有关 ,请参阅“黑钻石”。两者都在 stackoverflow.com/questions/38363566/ 中讨论...同时,任何编码/解码功能的使用都可能使事情变得更糟。RégionR�gion

答: 暂无答案