mysql数据库中的℃无法显示在网站上

时间:2018-10-29 12:02:00

标签: html mysql unicode

我有一个Mysql数据库,其数据如下:

温度计-10℃-110℃

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

我确实在html上声明了以下示例:

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

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

Thermometer -10?C - 110?C

我还需要做什么?

1 个答案:

答案 0 :(得分:2)

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

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

B0 43

如果它们使用PHP,则可以

SELECT col, HEX(col) FROM ...

然后报告返回的十六进制数。

This讨论了为什么 two 字符版本可以变成echo bin2hex($str); 。它表明:

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

与此同时,MySQL或PHP中没有(我知道)将一字符编码转换为两字符版本的东西。还有其他流程吗?

在Unicode规范中,将1个字符的版本分解为2个字符的版本,但是我不知道哪种产品会使用这种形式。另一个示例:°Lj

谁在转化?

如果MySQL从utf8转换为latin1,我会期望的

Lj

返回两个字符的版本。但是,不,它返回CONVERT(CONVERT(BINARY('℃') USING utf8) USING latin1) 。我必须假设数据正在处理的其他过程足以将1个字符转换为2个字符,然后再转换为latin1(与cp1252和ISO-8859-1和ISO- 8859-15)