XAMPP 上的 UTF-8 X MariaDB
UTF-8 X MariaDB on XAMPP
我在 XAMPP 上使用 MariaDB 时遇到问题(无论您是 Windows 上的 运行 还是 Linux)。
我在 Windows 10 中使用 XAMPP 和 PHP 7(最初我在 Xubuntu 上使用 XAMPP 5.6 并且出现同样的问题)作为我的站点开发服务器。我设置了:
- 所有 HTML 档案中的元标记都使用 UTF-8,
- PHPheader函数发送UTF -8数据,
PHP 指令,当我连接到数据库时(我使用 MySQLi)
-
mysqli_set_charset($conexao, "utf-8");
setlocale(LC_ALL, 'pt_BR.utf8');
php.ini上的default_coding设置为UTF_8,
- 并且所有数据库都设置在 utf8_general_ci 排序规则中。
我使用嵌入在 XAMPP 中的 phpMyAdmin 输入测试数据,第一个测试是在 phpMyAdmin 本身中创建字段,第二个测试使用该功能从 CSV 文件导出数据(该文件已被设置为 UTF-8 编码)。
当我尝试对数据库进行查询,然后尝试显示从该查询中获得的数据时,重音字符都带有问号,强制将从数据库中获得的信息与函数 utf8_encode.
当时我没有理会它,但是当我将我的站点转移到生产服务器(不是 XAMPP)时,显示了来自数据库并使用 utf8_encode 函数处理的数据(在所有浏览器中)仅用问号 (?) 和感叹号 (!) 代替那些重音字符。我不得不接电话 utf8_encode 并解决了问题。
在两个服务器中提交相同的 SQL 文件并最终在操作上出现这种差异。唯一的区别是生产服务器 phpMyAdmin 不接受我的 SQL 文件的以下 header:
/*!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部署服务器:
- PHP 7.0.4
- MariaDB 10.1.10
- phpMyAdmin 4.5.1
生产服务器:
- PHP 7.0.4
- phpMyAdmin 3.5.2.2
- MariaDB 10.0.24
请帮帮我!
亲切的问候,
路易斯
a) mysqli_set_charset() 可能由于各种原因而失败,因此:添加错误处理,例如
if ( !mysqli_set_charset($conexao, "utf-8") ) {
throw new mysqli_sql_exception('changing charset failed');
}
b) 用 utf8
代替 utf-8
再试一次
我在 XAMPP 上使用 MariaDB 时遇到问题(无论您是 Windows 上的 运行 还是 Linux)。 我在 Windows 10 中使用 XAMPP 和 PHP 7(最初我在 Xubuntu 上使用 XAMPP 5.6 并且出现同样的问题)作为我的站点开发服务器。我设置了:
- 所有 HTML 档案中的元标记都使用 UTF-8,
- PHPheader函数发送UTF -8数据,
PHP 指令,当我连接到数据库时(我使用 MySQLi)
mysqli_set_charset($conexao, "utf-8"); setlocale(LC_ALL, 'pt_BR.utf8');
php.ini上的default_coding设置为UTF_8,
- 并且所有数据库都设置在 utf8_general_ci 排序规则中。
我使用嵌入在 XAMPP 中的 phpMyAdmin 输入测试数据,第一个测试是在 phpMyAdmin 本身中创建字段,第二个测试使用该功能从 CSV 文件导出数据(该文件已被设置为 UTF-8 编码)。
当我尝试对数据库进行查询,然后尝试显示从该查询中获得的数据时,重音字符都带有问号,强制将从数据库中获得的信息与函数 utf8_encode.
当时我没有理会它,但是当我将我的站点转移到生产服务器(不是 XAMPP)时,显示了来自数据库并使用 utf8_encode 函数处理的数据(在所有浏览器中)仅用问号 (?) 和感叹号 (!) 代替那些重音字符。我不得不接电话 utf8_encode 并解决了问题。
在两个服务器中提交相同的 SQL 文件并最终在操作上出现这种差异。唯一的区别是生产服务器 phpMyAdmin 不接受我的 SQL 文件的以下 header:
/*!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部署服务器:
- PHP 7.0.4
- MariaDB 10.1.10
- phpMyAdmin 4.5.1
生产服务器:
- PHP 7.0.4
- phpMyAdmin 3.5.2.2
- MariaDB 10.0.24
请帮帮我!
亲切的问候,
路易斯
a) mysqli_set_charset() 可能由于各种原因而失败,因此:添加错误处理,例如
if ( !mysqli_set_charset($conexao, "utf-8") ) {
throw new mysqli_sql_exception('changing charset failed');
}
b) 用 utf8
代替 utf-8