【发布时间】:2016-04-15 20:45:51
【问题描述】:
我对 XAMPP 上的 MariaDB 有疑问(无论您是在 Windows 还是 Linux 上运行)。 我在 Windows 10 中使用 XAMPP 和 PHP 7(最初我在 Xubuntu 上使用 XAMPP 5.6,并且出现同样的问题)作为我的站点开发服务器。我设置了:
- 元标记在所有 HTML 档案中都有 UTF-8,
- 发送 UTF -8 数据的 PHP 标头函数,
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 文件的以下标头:
/*!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
请帮帮我!
亲切的问候,
路易斯
【问题讨论】:
-
不要使用
utf8_encode,这只会加剧问题。SHOW CREATE TABLE确保 columns 不写latin1。 -
亲爱的@RickJames,我在所有表格中使用了
SHOW CREATE TABLE,在所有varchar 列中都说:namecolumn varchar(255) COLLATE utf8_unicode_ci。没有列说latin1。