我有兩個MySql數據庫,在不同的服務器上。複製後編碼混合
我複製從數據庫1的內容數據庫2.
DATABASE 1
包含在UTF8_unicode_ci一切
通過PHP連接與做set_charset(utf8)
DATABASE 2
相同1
複製:
我複製內容從數據庫1,數據庫2,如下所示:
內容在文件印刷JSONfile.php與header('Content-type: application/json; charset=utf-8')
和PHP json_encode()
內容通過php與file_get_contents(JSONfile.php)
和`json_decode()``獲取。
,然後保存到DATABASE 2
旁註:我有我使用的服務器上覆制內容沒有別的辦法。不允許遠程連接。
問題:
當我從DATABASE 2檢索數據並顯示它們(總是使用元字符集UTF8)似乎出現一些奇怪的符號,就像這樣:
... autorizar拉restauración德拉PINTURA ALAInmaculadaâ去弗蘭......
注:mb_detect_encoding()
此字符串返回:UTF-8
只是嘗試,我做過utf8_decode()
和它進入:
... LA飲食德拉PINTURA的La Inmaculada德...
其中修復了一些它與非怪混合奇怪。
所以,在某處肯定有錯誤。
任何想法找到錯誤?
編輯: - 數據庫1的內容來源 -
數據庫1所有內容,是不同網站上SCRAPE的結果。
所有擦除都完成打開與HTML元字符集UTF8網站。
有些來源有&Xacute;實體,有些則不。
編輯2:
轉換爲十六進制上數據庫1
Despué小號德DOS - > 4465737075c3a97320646520646f73
轉換爲十六進制上數據庫2
Después de dos - > 4465737075c3a97320646520646f73 (同上)
所以問題不在於從一個數據庫複製到另一個。
我一直在調查,有一件很奇怪的事情。在數據庫(兩者都有)上,當我通過phpMyAdmin進行訪問時,有一些字段顯示爲「camión」。但是在顯示編碼的問題領域,如下所示:Después
我不知道phpMyAdmin應該顯示utf8格式還是可讀的格式。但是,同一張桌子之間的這種區別肯定是找到問題的大門。
THE SHOW CREATE TABLE回報:
CREATE TABLE `contents_data` (
`id` bigint(20) unsigned NOT NULL,
`title` varchar(200) COLLATE utf8_unicode_ci NOT NULL,
`main_img` varchar(250) COLLATE utf8_unicode_ci NOT NULL,
`data` text COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
CONSTRAINT `ContentsDataIdFK` FOREIGN KEY (`id`) REFERENCES `contents` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
編輯
現場做山坳(HEX)與字符串 「城堡」 返回 「416c63e17a6172」
非常好奇的事情:
在上面顯示的表中,字段VARCHAR e在所有行中,ncodes重音,以及字段TEXT都會給您帶來麻煩!
欄目有: 「VARCHAR」 和 「文本」 (看更多的CREATE TABLE以上代碼)
注意:同樣的事情發生每一行中,不管其來源的刮痕。
html實體'ó'不受MySQL中任何內容的影響,所以我們可以忽略這種情況。除了數據庫中的不一致以及無法搜索('WHERE','GROUP BY','ORDER BY')之外,應該沒有問題。我認爲'scrap'應拼寫'scrape'? – 2015-04-06 17:31:33
@RickJames - 更新了報廢文件(對不起,錯過了,謝謝。) - 我再次編輯了這個問題,以顯示有關該案例的更多有用信息。我仍在研究它。非常感謝您花時間閱讀我的文章。我真誠地贊同它。 – 2015-04-06 18:12:31
請在'camión'情況下選擇col,HEX(col)...'。如果你在單個表中有一個單獨的列,並且有一些'ó'和一些'''',它不會很容易修復。 – 2015-04-06 18:19:41