【发布时间】:2023-04-02 11:23:01
【问题描述】:
我使用 MySQL 5.1 并从 UTF-8 解码的 txt 文件中加载大约 270 万行到一个表中,该表本身声明为 utf8_unicode_ci,并且所有字符字段都声明为 utf8_unicode_ci,使用 @987654325 @...
在数据库本身中,所有字符似乎都是正确的,一切看起来都不错。但是,当我使用 php 打印它们时,字符显示为???,尽管我在 HTML 头中使用了 utf-8 声明:
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
...
在另一个表(使用 utf-8)中,我从提交的表单中插入文本,这些字符在数据库中奇怪地出现,但当我使用 SELECT... 打印它们时再次正确显示。
所以,我想知道:出了什么问题? UTF-8 字符是否正确显示在数据库中或奇怪但当您再次SELECT 它们时它们是否正常?或者问题出在哪里(将文件加载到数据库、HTML 或两者之间)??
非常感谢您的任何提示或建议! :)
【问题讨论】:
-
您是否在运行 MySQL 查询之前发出
SET NAMES utf8命令?您确定您的页面实际上呈现为 utf-8(如果有 HTTP 标头Content-Type: iso-8859-1,浏览器不同意哪个应该获胜)? -
我也建议你阅读joelonsoftware.com/articles/Unicode.html,确保你使用EVERYWHERE utf8 编码,MySQL 存储,MySQL 连接,PHP 本身,响应头,...
-
@DCoder:好吧,问题是,我从文件中加载了数据,并且由于文件名的正确路径有问题,我使用了 phpmyadmin 上的界面而不是纯 SQL 命令(加载数据输入文件)......你对http-header是什么意思?抱歉,如果这是一个愚蠢的问题,但它与 http-equiv="Content-Type" 相同吗?
-
在您的 PHP 代码中,当您设置数据库连接时,您需要执行
SET NAMES utf8来告诉 MySQL 您将以 UTF-8 发送和接收数据.至于 HTTP 标头,您的 php/Apache 可能配置为发送带有响应的Content-Type: text/html;charset=iso-8859-1标头。如果发生这种情况,浏览器可能会混淆是否应该将页面呈现为 iso-8859-1 或 utf-8。 -
@Styxxy:感谢这篇有趣文章的链接!
标签: mysql html utf-8 character-encoding