旧服务器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']);
有关显示原因的任何帮助?用双引号和单引号代替的标记会很有用 - 非常感谢。
答案 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);