Php+Mysql(UTF-8)一些字符仍然存在bug

Php+Mysql(UTF-8)一些字符仍然存在bug,php,mysql,utf-8,steam-web-api,utf8mb4,Php,Mysql,Utf 8,Steam Web Api,Utf8mb4,我得到了一个php脚本,它从Steam web api中获取昵称并将其插入mysql数据库。他们中的许多人都有罕见的俄罗斯和希腊文字。我在php.ini和所有带有 mb_internal_encoding('utf-8'); 我的PDO连接器配置为处理utf8 $connection = new PDO('mysql:host=localhost;dbname=d2bd;mysql:charset=utf8mb4', 'root', ''); $connection->setAttrib

我得到了一个php脚本,它从Steam web api中获取昵称并将其插入mysql数据库。他们中的许多人都有罕见的俄罗斯和希腊文字。我在php.ini和所有带有

mb_internal_encoding('utf-8');
我的PDO连接器配置为处理utf8

$connection = new PDO('mysql:host=localhost;dbname=d2bd;mysql:charset=utf8mb4', 'root', '');
$connection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$connection->setAttribute(PDO::ATTR_PERSISTENT, true);
$connection->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci'");
我的mysql数据库正确配置了utf8mb4

character_set_client utf8mb4
character_set_connection utf8mb4
character_set_database utf8mb4
character_set_filesystem binary
character_set_results utf8mb4
character_set_server utf8mb4
character_set_system utf8
character_sets_dir C:\xampp\mysql\share\charsets\
collation_connection utf8mb4_unicode_ci
collation_database utf8mb4_unicode_ci
collation_server utf8mb4_unicode_ci
completion_type NO_CHAIN
concurrent_insert AUTO
connect_timeout 10
core_file OFF
简单地说,我接受web api的输入并使用uft8_encode对其进行编码。然后我把它插入数据库。问题是有些字符编码不好,当我从数据库中调用它们时,它们都有错误

例1:

1.输入->Пчааачаачааа

2.编码->编码->编码->编码->编码->编码->编码->编码

3.插入数据库

4.从数据库->数据库->数据库->数据库->数据库->数据库->数据库->数据库->数据库->数据库->数据库->数据库->数据库->数据库->数据库

5.解码

6.产出->�?е�?�?анский �?е�?�?овск�

例2:

1.输入->$|/| 1↓_ € ♥ J

2.编码->$|/| 1–uuu¥J

3.插入数据库

4.从DB->1–uuj中选择

5.解码

6.输出->1�??_ �?� �?� J

字符/字符集/排序问题检查表 包括mysql、mysqli、PDO 所容纳之物 免责声明 我的插入在我的数据库中无法正常工作!我能做什么? 更改数据库或表的字符集和排序规则 设置SKcript文件的编码 使用php或meta标记设置页面的字符集 UTF8和UTF8mb4之间有什么区别? 对这一具体问题的答复 更多信息/附加链接 旁注 1.免责声明 这个答案不仅应该回答这个问题,还应该更广泛一点,让更多的人更快地找到一个捆绑的好答案

!!重要通知! 如果您更改了数据库中的某些内容,请始终确保您有一个数据库备份!检查2次,或3次

我愿意接受改进和评论,比如错误更正。 此外,如果语法不完美,我道歉:D

如果你遇到这样的问题:

Php+Mysql UTF-8、utf8mb4一些字符仍然存在bug 如何将整个MySQL数据库字符集和排序规则转换为UTF-8? 尝试将UTF-8插入MySQL时出现“字符串值不正确” 在my.cnf中将MySQL默认字符集更改为UTF-8? 在php和mysql中使用utf8mb4 PDO+MySQL和中断的UTF-8编码 php Mysql中插入数据时出错 PHP PDO:字符集,集合名称? 在MySQL中设置名称utf8? PHP mysql字符集utf8问题 UTF-8一路走来 用PHP处理MySQL中的utf8mb4数据 错误1115 42000:mysql中的未知字符集:“utf8mb4” …那么我的回答也许对你有帮助

2.我的插入在我的数据库中无法正常工作!我能做什么? 如果插入的数据在数据库中看起来像这样,那么这可能有多种原因

示例:

??????????
我从SQLyog更改了表的排序规则,但它似乎已损坏。当我直接从sql查询中更改字符串时,它工作了。

除非你的应用程序在ISO-8859-1中,否则没有必要对字符串进行编码/解码,但看起来不是这样。如果我不对数据库中的字符串进行编码和解码,那么他们就完全被窃听了。在第一个示例中,如果我不对其进行编码,结果是?????我敢肯定问题出在别的地方。你的网页字符集是什么?你是说html?因为我无法从用户输入中获取名称。我以JSON格式直接从steamapi获得它们。@holyknight请尝试以下两行代码:ini_setdefault_charset,UTF-8;标题的内容类型:text/html;字符集=UTF-8';