MySQL UTF8mb4编码下PHP读取€符号等字符显示异常排查
解决从UTF8mb4数据库读取特殊字符(€、表情)显示为?的问题
修正mysqli字符集设置参数:你当前使用的
mysqli_set_charset($db_connection,"utf8mb4_general_ci")是错误的,这个函数的第二个参数需要传入字符集名称,而非排序规则。正确写法为:mysqli_set_charset($db_connection, "utf8mb4");utf8mb4_general_ci是数据库/表/列的排序规则属性,和连接字符集的设置无关。
确保连接后立即设置字符集:必须在建立数据库连接完成后、执行任何查询操作之前调用
mysqli_set_charset,如果在查询之后才设置,已经读取的数据会因字符集不匹配损坏。检查phpMyAdmin的写入字符集:虽然你直接通过phpMyAdmin写入数据,但要确认phpMyAdmin自身的连接字符集为utf8mb4。可以进入phpMyAdmin的「设置」->「字符集」页面查看,确保默认连接字符集设为utf8mb4,否则写入数据库的数据本身可能已经是乱码状态。
验证php.ini的相关配置:检查php.ini中的
mysqli.default_charset是否设置为utf8mb4,如果之前是utf8,修改后重启PHP服务。另外,若使用mysqlnd驱动,确保没有其他强制覆盖字符集的配置干扰。关于mb_detect_encoding无返回值:这说明从数据库读取的字符串已经不是有效的UTF-8编码(大概率是字符集不匹配导致的损坏),先解决前面的连接字符集问题,再重新检测编码状态。
内容的提问来源于stack exchange,提问作者Luca Pennisi
相关产品推荐
相关产品推荐

