MySQL存储常见的特殊字符,但不是罕见的特殊字符

时间:2011-12-23 15:13:14

标签: php mysql utf-8

当我尝试插入一些罕见的特殊字符(∨∧→↔↔)时,它们会被存储为问号。但是当我尝试插入一些更常见的特殊字符时(©®¬),一切都很顺利。

我已将我可以找到的每个变量,数据库,表和连接设置为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中,因为当我在我的网络主机中运行代码时它不会出现。我仍然想解决它。

4 个答案:

答案 0 :(得分:0)

我过去在eclipse java控制台中遇到过类似的问题。我案例中数据库中的信息已正确存储。发生的事情是控制台不是为了显示这些字符。

要查看它们,我让我的应用程序生成一个带有特殊字符的文件,并在记事本++中打开它们,您可以使用它们更改要应用于文件的字符集。我有俄文字符这个问题。

答案 1 :(得分:0)

您在数据库中存储的内容必须包含在您使用的charset表中 例如,对于UTF-8: http://www.utf8-chartable.de/

答案 2 :(得分:0)

你错过了一个。您与mysql的连接也必须设置为UTF8。在最初连接到mysql之后,您的第一个“查询”应为“SET NAMES UTF8”。如果您使用的是终端程序,请同时运行该“查询”。

答案 3 :(得分:0)

似乎问题出现在我本地安装的MySQL中。我使用的是与Mac OSX 10.5捆绑在一起的过时版本。我下载并安装了最新版本的MySQL,问题解决了。

这就是为什么,男孩和女孩,拥有最新版本的软件总是好的。