当我尝试插入一些罕见的特殊字符(∨∧→↔↔)时,它们会被存储为问号。但是当我尝试插入一些更常见的特殊字符时(©®¬),一切都很顺利。
我已将我可以找到的每个变量,数据库,表和连接设置为UTF-8,但还没有运气。我错过了什么?提前谢谢!
这是一个最小的例子:
<?php
header('content-type:text/html; charset=utf-8;');
$connection = mysql_connect('localhost', 'root', '');
mysql_select_db('test', $connection);
mysql_set_charset('utf8', $connection);
mysql_query('SET NAMES UTF8');
$special_character = '∴';
echo 'Encoding of the special character before insert: '.base64_encode($special_character).'<br />';
mysql_query('INSERT INTO table (column) VALUES ("'.$special_character.'")');
$query = mysql_query('SELECT column FROM table');
while ($ROW = mysql_fetch_assoc($query))
{
echo 'Encoding of the special character after retrieval: '.base64_encode($ROW['column']).'<br />';
echo 'Output: '.$ROW['column'].'<br />';
}
mysql_close($connection);
?>
此脚本的输出为:
插入前特殊字符的编码:4oi0
检索后对特殊字符的编码:Pw ==
输出:?
可能是因为我有Mac OSX的标准MySQL安装,它没有my.cnf文件吗?也许这个安装的默认值不是UTF-8?有人知道吗?
更新:我已经确定问题出在我本地安装的MySQL中,因为当我在我的网络主机中运行代码时它不会出现。我仍然想解决它。
答案 0 :(得分:0)
我过去在eclipse java控制台中遇到过类似的问题。我案例中数据库中的信息已正确存储。发生的事情是控制台不是为了显示这些字符。
要查看它们,我让我的应用程序生成一个带有特殊字符的文件,并在记事本++中打开它们,您可以使用它们更改要应用于文件的字符集。我有俄文字符这个问题。
答案 1 :(得分:0)
您在数据库中存储的内容必须包含在您使用的charset表中 例如,对于UTF-8: http://www.utf8-chartable.de/
答案 2 :(得分:0)
答案 3 :(得分:0)
似乎问题出现在我本地安装的MySQL中。我使用的是与Mac OSX 10.5捆绑在一起的过时版本。我下载并安装了最新版本的MySQL,问题解决了。
这就是为什么,男孩和女孩,拥有最新版本的软件总是好的。