我在 XAMPP 上使用 MariaDB 时遇到问题(无论您是在 Windows 还是 Linux 上运行)。 我在 Windows 10 中使用 XAMPP 和 PHP 7(最初我在 Xubuntu 上使用 XAMPP 5.6,并且出现了同样的问题)作为我的站点开发服务器。我设置了:
当我连接到数据库时的 PHP 指令(我使用 MySQLi)
mysqli_set_charset($conexao, "utf-8");
setlocale(LC_ALL, 'pt_BR.utf8');
php.ini 上的 default_coding 设置为 UTF_8,
我使用XAMPP中嵌入的phpMyAdmin来输入测试数据,在第一个测试中是在phpMyAdmin本身中创建字段,在第二个测试中使用该功能从CSV文件导出数据(该文件已设置为UTF-8编码)。
发生的情况是,当我尝试对数据库进行查询,然后尝试显示从该查询获得的数据时,重音字符都带有问号,迫使使用函数utf8_encode处理从数据库获得的信息。
当时我并不关心它,但是当将我的站点转移到生产服务器(不是 XAMPP)时,来自数据库并使用 utf8_encode 函数处理的数据仅显示(在所有浏览器中)而不是那些重音字符问号 (?) 和感叹号 (!)。我不得不接听 utf8_encode 的电话并解决了问题。
两台服务器都提交了相同的 SQL 文件,最终出现了这种操作差异。唯一的区别是生产服务器 phpMyAdmin 不接受我的 SQL 文件的以下标头:
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */
以下是服务器设置: XAMPP 部署服务器:
生产服务器:
请帮助我!
亲切的问候,
路易斯
a) mysqli_set_charset() 可能会因各种原因而失败,因此:添加错误处理,例如
if ( !mysqli_set_charset($conexao, "utf-8") ) {
throw new mysqli_sql_exception('changing charset failed');
}
b) 使用
utf8
而不是 我遇到了完全相同的问题,你救了我的命。 ChatGPT 无法解决这个问题。非常感谢你