我有一个包含多个表的数据库。数据库和表以及表的每一行都设置为utf8_romanian_ci
。
我导入的每个包含变音符号的名称都无法正确显示。
例如:如果我MaÂehx
在表中介绍,我刚刚M
表格中的数据是从csv
文件导入的。在 Excel 中,变音符号可以正常显示。
我该如何解决这个问题?
答案1
UTF-8 是个反复无常的情妇。对于典型的 Web 应用程序,您必须在多个级别设置 UTF-8。即使 phpMyAdmin 代码与 UTF8 配合良好,它也不是在真空中运行的:服务器配置很重要。数据库也很重要,数据库的数据源也很重要。让我们总结一下一般应用程序中可能存在摩擦的区域,特别关注 phpMyAdmin 感兴趣的区域。
A. 数据来源
当数据被导入数据库时(例如从文本文件导入),它必须具有正确的编码。变音符号可能显示在 Excel 中,但编码可以是任何内容。因此,您可能会得到一个看起来正确但无法正确导入的 CSV 文件。您可以在文本编辑器(例如 EditPad)或 IDE(例如 Komodo)中检查和转换 CSV 文件的编码。在许多人都有的 Notepad++ 中,您可以选择“编码”来查看当前编码,并且可以根据需要选择编码/转换为 UTF8。
B. 在您的数据库中。表的字符集和排序规则必须设置为 UTF-8。听起来你可能已经这样做了。
如果没有的话,你需要类似以下的东西:
ALTER TABLE MyTable
DEFAULT CHARACTER SET utf8,
COLLATE utf8_general_ci;
这是通用设置,但您的罗马尼亚语排序规则也应该可以正常工作。
C.与数据库的连接。你需要类似这样的东西:
$connectDSN = "mysql:host={$db_host};dbname={$db_name};charset=UTF-8";
PhpMyAdmin 应该可以正确连接。在登录页面上,您应该会看到
Server charset: UTF-8 Unicode (utf8)
如果没有,请继续阅读。
D. php 必须处理 UTF8。在 php.ini 中,你会需要类似这样的内容:
default_charset = UTF-8
mbstring.language = Neutral
mbstring.internal_encoding = UTF-8
mbstring.encoding_translation = On
mbstring.http_input = auto
mbstring.http_output = UTF-8
mbstring.detect_order = auto
mbstring.substitute_character = “0xFFFD”
您可以使用 phpinfo() 检查服务器设置。在共享主机上,您通常无法访问 php.ini,而必须直接在脚本中更改设置。顺便说一句,请记住使用 mb 函数。
E. 标题设置
为了让浏览器知道它获取了什么,它需要接收 php 发送的如下标头:
<?php header('Content-type: text/html; charset=UTF-8'); ?>
这应该不是 phpMyAdmin 的问题。在 Firefox 中,使用 Web 开发人员扩展,您可以转到信息/查看页面信息。在常规选项卡中,这将显示编码。
F. HTML 元标签
建议这样做以帮助浏览器。
<meta charset="UTF-8">
这应该不是 phpMyAdmin 的问题。再次检查浏览器中看到的编码。
G. 字体
浏览器可能没有字体来显示某些字符,尽管现代版本在后备字体方面做得相当不错。这对你来说可能不是问题。
因此有很多地方可能会出错。
希望这可以帮助您识别问题!
当所有东西都排好队时,就会出现奇迹……你会在任何地方都获得 UTF8。
别忘了:
没有人能想象生活会变得如此糟糕。
没有人能想象生活会变得如此糟糕