【问题标题】:℃ from mysql database cannot display on website [duplicate]来自mysql数据库的℃无法在网站上显示[重复]
【发布时间】:2019-04-02 08:39:06
【问题描述】:

我有一个 Mysql 数据库,其中包含以下数据:

温度计 -10℃ - 110℃

我从其他网站复制了那个学位符号。

我确实像这里的一些例子一样在我的 html 上声明:

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

但是当我使用 php 将这些数据调用到我的网站时它不会显示,它只会显示

Thermometer -10?C - 110?C

我还需要做什么?

【问题讨论】:

  • 尝试在 CSS 中设置不同的字体
  • 声明您在 HTML 源代码中使用 UTF-8 可能是最不相关的位。您需要确保您实际上在任何地方都使用 UTF-8(文本编辑器、数据库表、数据库连接......)。此外, 在 UTF-8 中编码为 E2 84 83。显示原始字节并验证它在什么时候被破坏。
  • @Adder 我不认为现在浏览器通常是这样工作的。如果给定字体中的字形不可用,您会自动获得替换字符。
  • Álvaro González 我在表格中使用 utf8_general_ci。
  • 字体和 CSS 在这里不太可能有任何影响。

标签: html mysql unicode


【解决方案1】:

我听说单个 Unicode 字符(十六进制E28483)正在变成两个 Unicode 字符°C(十六进制C2B0 43 )。让我们验证一下。如果编码为 latin1,后一个十六进制将是B0 43

如果字符在数据库中,则执行

SELECT col, HEX(col) FROM ...

如果他们在 PHP 中,那么做

echo bin2hex($str);

然后报告你得到了哪个十六进制。

This 讨论了为什么 two 字符版本会变成?C。它建议:

  • 要存储的字节未编码为 utf8/utf8mb4。特别是,十六进制 B0° 的 latin1 编码。
  • 数据库中的列不是 CHARACTER SET utf8(或 utf8mb4)。解决这个问题。 (使用 SHOW CREATE TABLE。)
  • 另外,请检查读取期间的连接是否为 UTF-8。

同时,在 MySQL 或 PHP 中,没有任何东西(据我所知)可以将单字符编码转换为双字符版本。是否涉及其他流程?

在 Unicode 规范中,有一个将 1-char 版本“分解”为 2-char 版本的方法,但我不知道什么产品会使用这种方法。另一个例子:Lj vs Lj

谁在转化?

如果 MySQL 正在从 utf8 转换为 latin1,我希望

CONVERT(CONVERT(BINARY('℃') USING utf8) USING latin1)

返回两个字符的版本。但是,不,它返回'?'。我必须假设数据正在经历的其他一些过程足以将 1-char 的东西转换为 2-chars,然后转换为 latin1(这几乎与 cp1252 和 ISO-8859-1 和 ISO- 8859-15)

【讨论】:

  • 我运行 HEX(col) 它确实返回 (C2B0 43) °C。
  • 当我运行 -sql 到 mysql: show variables like "collat​​ion_%",它返回 collat​​ion_connection 是 utf8mb4_bin,collat​​ion_database 是 utf8_unicode_ci,collat​​ion_server 是 ** latin1_swedish_c**。这个 collat​​ion_server latin1_swedish_c 会是问题吗??
  • @Newbee123 - 寻找 "char%" 而不是 "collation%"。十六进制表示转换发生在之前 INSERTing 到数据库中。然后发生了什么?
  • sql to mysql:显示变量,如“character%”,它返回:Variable_name: Value character_set_client: utf8mb4, character_set_connection: utf8mb4, character_set_database: latin1, character_set_filesystem: binary, character_set_results: utf8mb4, character_set_server: latin1, character_set_system:utf8,character_sets_dir:/usr/share/mysql/charsets
  • 会不会是 **character_set_server: latin1 导致了问题??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-05
相关资源
最近更新 更多