gpt4 book ai didi

mysql - 英镑符号未显示在网页上

转载 作者:可可西里 更新时间:2023-11-01 07:46:48 25 4
gpt4 key购买 nike

我有一个 mysql 数据库表来存储国家名称和货币符号 - CHARSET 已正确设置为 UTF8。

这是插入表中的示例数据

insert into country ( country_name, currency_name, currency_code, currency_symbol) values ('UK','Pounds','GBP','£');

当我查看数据库时 - 井号显示正常 - 但当我从数据库中检索它并将其显示在网站上时 - 出现一个奇怪的方形符号,里面有一个问号而不是井号。

编辑在 my.cnf 中 - 字符集设置为 latin1 - 我将其更改为 utf8 - 然后我以 root 身份登录并运行\s - 它返回了

Server characterset:    utf8Client characterset:    utf8

排序规则

-- DatabaseSELECT default_collation_name  FROM information_schema.schemata WHERE schema_name = 'swipe_prod';THIS DOES NOT RETURN ANYTHING-- TableSELECT table_collation  FROM information_schema.tables WHERE TABLE_NAME = 'country';THIS RETURNS utf8_general_ci-- ColumnsSELECT collation_name  FROM information_schema.columns WHERE TABLE_NAME = 'country';THIS RETURNS 7 ROWS but all have either null or utf8_general_ci

PHP 代码

<?php$con = mysql_connect("localhost","user","123456");mysql_select_db("swipe_db", $con);$result = mysql_query("SELECT * FROM country where country_name='UK'");while($row = mysql_fetch_array($result)){  echo $row['country_name'] . " " . $row['currency_symbol'];}mysql_close($con);?>

请指教谢谢

最佳答案

当您看到“内部带有问号的奇怪方形符号”时,也称为 REPLACEMENT CHARACTER ,这通常表明您有一个字节在 80-FF (128-255) 范围内,并且系统正在尝试以 UTF-8 格式呈现它。

整个字节范围对于 UTF-8 中的单字节字符是无效的,但在 ISO-8859-1 等西方编码中都很常见。

当我查看您的页面并手动将字符编码从 UTF-8 切换到 ISO-8859-1 时(在 Firefox 中使用 View >> Character Encoding >> Western (ISO-8859-1)) 然后 POUND SIGN显示正常。

那么,这是怎么回事呢?很难说 - 有几十个地方可以搞砸。但很可能是在数据库级别。将表上的CHARSET设置为UTF8一般是不行的。在字符正确地在系统中移动之前,所有的字符集和排序规则都需要按顺序排列。一个常见的陷阱是设置不当connection charsets ,所以我会从这里开始。

如果您需要更多指导,请告诉我。

编辑

要检查为该值实际存储了哪些字节,请运行此查询。

SELECT hex( currency_symbol )
FROM country
WHERE country_name = 'UK'

如果您看到 A3,那么您就知道该字符存储为 ISO-8859-1。这意味着问题发生在写入数据库期间或之前。

如果您看到 C2A3,那么您就知道该字符存储为 UTF-8。这意味着问题发生在从数据库读取之后和写入浏览器之前。

编辑2

-- Database
SELECT default_collation_name
FROM information_schema.schemata
WHERE schema_name = 'your_db_name';

-- Table
SELECT table_collation
FROM information_schema.tables
WHERE TABLE_NAME = 'country';

-- Columns
SELECT collation_name
FROM information_schema.columns
WHERE TABLE_NAME = 'country';

关于mysql - 英镑符号未显示在网页上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2959515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com