veritabanı kodlama sorunu?

2 Cevap php

Old server db = MySQL v4.0.21 New server db = MySQL v5.0.45

Ben yeni bir sunucuya bir uygulama hareketli am, ve ben veritabanı üzerinden kopyalanan.

App gün için bir gündem gönderir ve çift ve her ne zaman var tek tırnak "', bunlar soru işaretleri olarak gösterilir?

Bu gibi gelir sunucuda o ?The Horror of Race: HBO?s True Blood? taşındı

“The Horror of Race: HBO’s True Blood”: Bu özgün sunucu uygulaması üzerinde inşa edilmiş gibi görünüyor ne

Veritabanının Ekran w / i http://grab.by/2EsU (orijinal sunucusu mysql v4.0.21) phpmyadmin ve http://grab.by/2EtN (yeni sunucusu mysql 5.0.45)

http://grab.by/2Et2 (sadece / i vücut sütunun w olur): tablonun Screenshot veri içinde depolanan

Yeni sunucu tablo içindeki verilerin Screenshot: (? Eğer soru işaretlerini göreceksiniz) http://grab.by/2Etb

Özgün sunucu tablo içindeki verilerin Ekran: http://grab.by/2Etl

App PHP w / inşa edilen ve nl2br($body); gibi vücudu basar

$body=addslashes($_POST['body']);: dize i db tabloya sokulmadan önce $ vücut değişkeni, böyle w / saklanır

Bu görüntülüyor neden olarak herhangi bir yardım? çift ​​ve tek tırnak yerine işaretleri, yararlı olacaktır - çok takdir.

2 Cevap

Thhis nedeniyle karakter kodlama ayarlarında bir fark büyük olasılıkla. Bu yerlerde bir çift yürürlükte olabilir. Ben her iki sunucu oturum ve mutlaka tavsiye ediyorum:

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)

Orada herhangi bir fark görürseniz bakın. Varsayılan bağlantı karakter takımı yeni sunucu için farklı Örneğin, bu sonuçlar alabilir.

You should also ensure the character encoding settings for the columns: do a SHOW CREATE TABLE <table-name> and check if the character sets are still the same at the column level mysql>

EDIT Alternatively, as Martin pointed out in the comments, you could be dealing with a SQL dump that is encoded in an encoding you didn't anticipate. Here's some more information on that: http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_default-character-set. In this case you could try to re-encode the dump file using a tool like iconv (http://www.gnu.org/software/libiconv/documentation/libiconv/iconv.1.html)

Dürüst olmak gerekirse ben her şeyi geçerli görünüyor, çünkü sorunun bu açıklamasının eksik bulmacanın bir parçası olduğunu düşünüyorum. Eğer garip sorunu çözebilir SQL Injection önlemek için kullanabilirsiniz iki diğer işlevleri vardır.

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

veya daha iyi bir yaklaşım:

$var=mysql_real_escape_string($var);