如何从 mysql /phpmyadmin 以 UTF8 格式显示文本?

Utf*_*tf8 5 database mysql charset utf-8 diacritics

我有一个包含多个表的数据库。数据库和表以及表的每一行都设置为utf8_romanian_ci.

我导入的每个包含变音符号的名称都不会正确显示。

例如:如果我MaÂehx在表中介绍我刚刚M

表中的数据是从csv文件中导入的。在 Excel 中,变音符号正常显示。

我该如何解决这个问题?

zx8*_*x81 5

UTF-8 是个善变的情妇。对于典型的 Web 应用程序,您必须在多个级别设置 UTF-8。即使 phpMyAdmin 代码可以很好地使用 UTF8,它也不是在真空中运行:服务器配置很重要。数据库也是如此,数据库的数据源也是如此。让我们总结一下一般应用程序中潜在摩擦的领域,特别关注 phpMyAdmin 感兴趣的领域。

\n\n

A. 数据来源

\n\n

当数据(例如从文本文件)导入数据库时​​,它必须具有正确的编码。Excel 中可能会显示变音符号,但编码可以是任何内容。因此,您可能拥有一个看起来正确但无法正确导入的 CSV 文件。您可以在文本编辑器(例如 EditPad)或 IDE(例如 Komodo)中检查和转换 CSV 文件的编码。在很多人都有的Notepad++中,你可以选择“编码”来查看你当前的编码,你可以根据需要选择编码/转换为UTF8。

\n\n

B. 在您的数据库中。表的字符集和排序规则必须设置为 UTF-8。听起来您可能已经这样做了。

\n\n

如果没有,你需要类似的东西:

\n\n
ALTER TABLE MyTable\nDEFAULT CHARACTER SET utf8,\nCOLLATE utf8_general_ci;\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是通用设置,但您的罗马尼亚语排序规则也应该可以正常工作。

\n\n

C. 与数据库的连接。你需要类似的东西:

\n\n
$connectDSN = "mysql:host={$db_host};dbname={$db_name};charset=UTF-8";\n
Run Code Online (Sandbox Code Playgroud)\n\n

PhpMyAdmin 应正确连接。在登陆页面上,您应该看到

\n\n
Server charset: UTF-8 Unicode (utf8) \n
Run Code Online (Sandbox Code Playgroud)\n\n

如果没有,请继续阅读。

\n\n

D. php必须处理UTF8。在 php.ini 中,您需要类似以下内容:

\n\n
default_charset = UTF-8     \nmbstring.language = Neutral \nmbstring.internal_encoding = UTF-8      \nmbstring.encoding_translation = On      \nmbstring.http_input = auto      \nmbstring.http_output = UTF-8        \nmbstring.detect_order = auto        \nmbstring.substitute_character = \xe2\x80\x9c0xFFFD\xe2\x80\x9d    \n
Run Code Online (Sandbox Code Playgroud)\n\n

您可以使用 phpinfo() 检查您的服务器设置。在共享主机上,您通常无权访问 php.ini,必须直接在脚本中更改设置。\n顺便说一句,请记住使用 mb 函数。

\n\n

E. 标头设置

\n\n

为了让浏览器知道它正在获取什么,它需要接收 php 发送的如下标头:

\n\n
<?php  header(\'Content-type: text/html; charset=UTF-8\');   ?>\n
Run Code Online (Sandbox Code Playgroud)\n\n

这不应该是 phpMyAdmin 的问题。\n在 Firefox 中,使用 Web Developer 扩展,您可以转到“信息”/“查看页面信息”。在“常规”选项卡中,这将显示编码。

\n\n

F. HTML 元标记

\n\n

建议这样做以帮助浏览器。

\n\n
<meta charset="UTF-8">\n
Run Code Online (Sandbox Code Playgroud)\n\n

这不应该是 phpMyAdmin 的问题。\n再次在浏览器中检查它所看到的编码。

\n\n

G.字体

\n\n

浏览器可能没有显示某些字符的字体,尽管现代版本对于后备字体非常好。对于您的情况来说,这可能不是问题。

\n\n

所以有很多地方可能会出错。

\n\n

希望这可以帮助您识别问题!

\n\n

当一切都排列好后,神奇的事情就发生了……你会发现到处都是 UTF8。

\n\n

并且不要忘记:

\n\n

\xe0\xb2\xac\xe0\xb2\xbe \xe0\xb2\x87\xe0\xb2\xb2\xe0\xb3\x8d\xe0\xb2\xb2\xe0\xb2\xbf \xe0\xb2\xb8\xe0 \xb2\x82\xe0\xb2\xad\xe0\xb2\xb5\xe0\xb2\xbf\xe0\xb2\xb8\xe0\xb3\x81\xe0\xb2\x87\xe0\xb2\x82\xe0\xb2 \xa6\xe0\xb3\x86\xe0\xb2\xa8\xe0\xb3\x8d\xe0\xb2\xa8 \xe0\xb2\xb9\xe0\xb3\x83\xe0\xb2\xa6\xe0\xb2\xaf \xe0\xb2\xa6\xe0\xb2\xb2\xe0\xb2\xbf

\n\n

\xe0\xb2\xa8\xe0\xb2\xbf\xe0\xb2\xa4\xe0\xb3\x8d\xe0\xb2\xaf\xe0\xb2\xb5\xe0\xb3\x82\xe0\xb2\x85\xe0 \xb2\xb5\xe0\xb2\xa4\xe0\xb2\xb0\xe0\xb2\xbf\xe0\xb2\xaa\xe0\xb2\xb8\xe0\xb2\xa4\xe0\xb3\x8d\xe0\xb2 \xaf\xe0\xb2\xbe\xe0\xb2\xb5\xe0\xb2\xa4\xe0\xb2\xbe\xe0\xb2\xb0

\n