我得到了从 MySQL 数据库中提取数据的奇怪字符
Posted
技术标签:
【中文标题】我得到了从 MySQL 数据库中提取数据的奇怪字符【英文标题】:I got weird characters extracting data from MySQL db 【发布时间】:2011-04-06 18:14:13 【问题描述】:嗯,我有一个 mysql 数据库,编码为 utf8_unicode_ci,它在当前应用程序中运行起来就像一个魅力(用 Code Igniter 编写)
现在,我正在开发一个新的 php 应用程序,当我尝试恢复数据时,有几个字符无法读取 - 字符在使用 phpMyAdmin 的数据库中显示正常,但是当我尝试将其放在网页中时,它变成了“ROLA �60”。
这些字符是西班牙字母,例如 ñ、á、Ó... 或 ascii 代码,例如 €、Ø...
问题出在哪里?我已将页面设置为 meta http-equiv="Content-Type" content="text/html; charset=UTF-8",我尝试了 mysql_set_charset() 函数,但仍然什么都没有。
有遇到此类问题的经验吗?
【问题讨论】:
再次尝试mysql_set_charset() 【参考方案1】:我在我的数据库驱动应用程序中注意到了这个确切的问题,我花了很长时间才解决这个问题!
出现问题是因为您的应用程序中至少有三个地方需要定义其字符集,并且它们都必须是相同的字符集(并且该字符集必须能够处理您正在处理的字符)。
问号符号及其变体出现在浏览器不理解所传递的字符时。
确保您的字符集在以下位置匹配:
-
HTML 头部部分。
数据库排序规则本身 - 当您创建新表或更改现有表的架构时,可以在 phpMyAdmin 中设置。
最容易被忽视的字符集设置:php.ini 文件的“default_charset”值(可以通过 PHP 脚本或 httpd.conf 文件设置)。
从您的帖子来看,您的 PHP 配置可能设置为使用不同的 default_charset。这意味着您的数据库将很好地存储字符,并且会将字符很好地发送到您的脚本,但是 PHP 脚本本身不知道如何处理该字符,因此会作为烦人的问号符号输出到浏览器.
尝试将 php.ini 值更改为相同的字符集,您可能会惊讶地发现字符显示正常!如果您无权访问 php.ini,可以使用以下函数更改该值:
ini_set("default_charset", "UTF-8");
希望这会有所帮助。
【讨论】:
嘿,冷静点——我遇到了这个确切的问题,所以在这里记录下来。它为我解决了这个问题,也为我们的提问者 Arthur 解决了问题。很抱歉发布“废话”,但这是您有时必须在 PHP 中做的一个小技巧。如果您长期使用 PHP,您应该知道您必须时不时地采取某些小技巧,即使它违反了文档。【参考方案2】:如果 mysql_set_charset() 不起作用,请尝试执行
mysql_query('SET NAMES utf8');
建立连接后。
【讨论】:
【参考方案3】:任何类型的问题只需要一种经验:了解您在做什么和调试。现在非常稀有的技能,多亏了像 *** 这样的网站。
涉及编码的级别有 3 个:
数据库级 服务器端脚本级别。 html 页面级别。应分别检查每个。
检查 HTML 级别很容易。只需单击浏览器中的“查看”菜单,然后单击“编码”并查看标记的是哪一个。如果是对的,那你就没事。如果没有 - 发送了错误的 HTTP 标头,您必须将其改正
对于服务器端,几乎没有什么可做的。只是告诉mysql你想要哪种编码。它可以通过两种方式完成:
mysql_set_charset() - 首选 SET NAMES 查询注意 UTF-8 编码在 mysql 中名为 utf8
。
数据库级别似乎没问题。在你的情况下。
【讨论】:
+1:用于mysql_query('SET NAMES utf8');
查询。这可以解决 99% 的此类问题。
@shamittomar 实际上,如果您使用的是 mysql_real_escape_string 函数,则此解决方案比 mysql_set_charset() 最差。因为 SET NAMES 使这个函数的功能无用【参考方案4】:
mysql_query('SET NAMES utf8');
在通过 Chrome 浏览而不是 FF 或 IE 时有效
【讨论】:
【参考方案5】:试试下面可能会解决你的问题:
<?php
$text = "This is the Euro symbol '€'.";
echo 'Original : ', $text, PHP_EOL;
echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text), PHP_EOL;
echo 'IGNORE : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $text), PHP_EOL;
echo 'Plain : ', iconv("UTF-8", "ISO-8859-1", $text), PHP_EOL;
?>
http://php.net/manual/en/function.iconv.php
【讨论】:
以上是关于我得到了从 MySQL 数据库中提取数据的奇怪字符的主要内容,如果未能解决你的问题,请参考以下文章
从 CNN(Xception 模型)中提取特征,我得到 IsADirectoryError?