数据库编码问题?显示带有问号的双引号和单引号

时间:2010-02-24 20:16:53

标签: php mysql linux

旧服务器db = MySQL v4.0.21 新服务器db = MySQL v5.0.45

我正在将应用程序移动到新服务器,我复制了数据库。

该应用程序会发送当天的日程安排,只要有双重日程安排。单引号“',它们显示为问号?

在服务器上将它移动到?The Horror of Race: HBO?s True Blood?

这就是构建在原始服务器应用程序上的样子:“The Horror of Race: HBO’s True Blood”

数据库的屏幕截图w / i phpmyadmin http://grab.by/2EsU(原始服务器mysql v4.0.21)和http://grab.by/2EtN(新服务器mysql 5.0.45)

数据存储在其中的表格的屏幕截图:http://grab.by/2Et2(它只发生在身体列上)

新服务器表中的数据屏幕截图:http://grab.by/2Etb(您会注意到问号?)

原始服务器表中的数据屏幕截图:http://grab.by/2Etl

该应用程序是使用PHP构建的,它打印的内容类似于nl2br($body);

在插入db表之前,字符串与$ body变量一起存储,如下所示:$body=addslashes($_POST['body']);

有关显示原因的任何帮助?用双引号和单引号代替的标记会很有用 - 非常感谢。

2 个答案:

答案 0 :(得分:3)

这很可能是由于字符编码设置的不同造成的。这可能在几个地方有效。我建议你登录两台服务器并执行:

mysql> show variables like '%character%';
+--------------------------+-----------------------------------------------+
| Variable_name            | Value                                         |
+--------------------------+-----------------------------------------------+
| character_set_client     | latin1                                        |
| character_set_connection | latin1                                        |
| character_set_database   | latin1                                        |
| character_set_filesystem | binary                                        |
| character_set_results    | latin1                                        |
| character_set_server     | latin1                                        |
| character_set_system     | utf8                                          |
| character_sets_dir       | D:\Servers\MySQL\MySQL_5_1_36\share\charsets\ |
+--------------------------+-----------------------------------------------+
8 rows in set (0.00 sec)

看看你有没有看到任何差异。例如,如果新服务器的默认连接字符集不同,则可以获得这些结果。

您还应该确保列的字符编码设置:执行SHOW CREATE TABLE <table-name>并检查列级别的字符集是否仍然相同 MySQL的&GT;

EDIT 或者,正如Martin在评论中指出的那样,您可能正在处理以您未预料到的编码进行编码的SQL转储。以下是有关此问题的更多信息:http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_default-character-set。在这种情况下,您可以尝试使用iconv(http://www.gnu.org/software/libiconv/documentation/libiconv/iconv.1.html)等工具重新编码转储文件

答案 1 :(得分:1)

老实说,我认为这个问题的描述中还有另一个难题,因为一切看起来都是有效的。您可以使用另外两个函数来阻止可能解决您的奇怪问题的SQL注入。

$var=addslashes(htmlspeicalchars($var,ENT_QUOTES));

或更好的方法:

$var=mysql_real_escape_string($var);