当前位置: 首页 > 面试题库 >

UTF-8:在数据库中正确显示,但是尽管使用utf-8字符集,但在HTML中却无法正确显示

丁阳羽
2023-03-14
问题内容

我使用MySQL
5.1,并从一个270万行的UTF-8解码txt文件加载到一个表中,该表本身声明为utf8_unicode_ci,并且所有char字段都声明为utf8_unicode_ci,使用LOAD DATA INFILE

数据库本身中,所有字符似乎都是正确的,一切看起来都不错。但是,当我使用php打印它们时,字符显示为???,尽管我在HTML头中使用utf-8声明:

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
...

在另一个表(使用utf-8)中,我从提交的表单中插入了文本,这些字符在数据库中奇怪地显示,但是当我使用进行打印时,这些字符又可以正确显示SELECT...

所以,我想知道:出什么事了?是UTF-8在数据库中正确显示字符还是奇怪,但是当您SELECT再次输入字符时,它们还可以吗?还是问题出在哪里(将文件加载到db,HTML或两者之间的某个位置时)?

非常感谢您的任何提示或建议!:)


问题答案:

注意:MySQL的utf8字符集是有限的,它仅支持BMP中的Unicode字符,最多占用三个字节。您应该utf8mb4改为使用。

  • 在运行任何MySQL查询之前,请确保在连接后将命令发送给MySQL。 SET NAMES utf8 SET NAMES utf8mb4
  • 确保您的页面实际呈现为utf-8(如果存在HTTP标头Content-Type: text/html;charset=iso-8859-1,则浏览器不同意哪个应获胜)。
  • 阅读这篇文章:处理Unicode的前向后在一个Web应用程序(但请记住,以取代utf8utf8mb4MySQL在哪儿而言)。

如果phpMyAdmin将您输入的数据显示为正确的Unicode文本,那么我敢打赌,SET NAMES utf8连接后您不会这样做。



 类似资料:
  • 我有一个任务: 当我使用命令时: 文本显示不正确。如何修复?谢谢

  • 问题内容: 我有一个使用ncurses用C编写的程序。它让用户输入并显示它。如果用户输入utf8字符,它将无法正确显示。 我将输入的字符用户保存到文件中。而且我直接在Shell中将此文件正确显示。 我搜索了stackoverflow和google,并尝试了几种方法(例如与ncursesw链接)显示不正确。 我: 可以正确显示用户输入的内容。 如何使ncurses正确显示UTF-8字符? 使用ncu

  • 问题内容: 我在AngularJS上建立的SPA中有一个文本输入框,供用户向打印输出中添加标题。输入框的声明如下: 文本框中填充了服务器提供的默认标题。用户可以将标题更改为适合他们的名称。更改标题后,服务器将更新并在响应的标题中发送回新标题,然后替换框中的标题。这非常适合标准ASCII类型的字符。 但是,对于unicode字符(例如àßéçøö),它不起作用。文本已正确发送,在服务器上正确更新并正

  • 问题内容: 我的数据库已正确设置为UTF-8,并且正在处理包含日语字符的数据库。如果我从mysql命令行执行SELECT * …,我会正确看到日语字符。当将数据从数据库中拉出并显示在网页上时,我可以正确地看到它。 但是,在phpMyAdmin中查看表数据时,我只会看到垃圾文本。即。 ç§ã日本料ç†ãŒå¥½ããããã㥥œœ¬æ–™ç†ã… 如何获取phpMyAdmin以日语显示字

  • 我正在处理一个位置数据集,其中一些位置名称使用本地字符。大多数字符都被正确地看到,但我对一些罗马尼亚字符有意见,比如“ș”。 我尝试改变我的Windows 10 64位系统区域设置使用UTF-8编码,但这并没有解决问题。 可以在此处找到用于测试的示例文件:https://drive.google.com/file/d/1T7QQQ7G_dA_rXD9Ewf51uuQ6CUkscjP_/view?u

  • 我真的被Eclipselink MOXy 2.5.1卡住了,没有给我提供正确编码的亚洲字符(或其他字符,例如:德语umLautsäöü)。 我的代码: 测试类如下所示: 属性"key"仅为测试目的初始化一个字符串,我从一个UTF-8编码的文件中读取,该文件没有包含BOM 当我通过客户端调用这两种资源时: 我得到以下结果: 奇怪的是,当我在/test2中编组测试对象的toString()方法时,它将