2009-12-20 38 views
0

我有一個(WordPress的)博客,我的一些舊帖子有一個字符編碼問題,其中英鎊顯示爲£(即一個英鎊符號前綴大寫字母'A')。可以使用SQL REPLACE修復字符編碼錯誤嗎?

的問題是在DB的水平,所以我會運行下面的SQL語句:

update wp_posts set post_content = replace(post_content, ‘£’, ‘£’); 

這將是愚蠢的?


背景信息(不要求閱讀):

這是怎麼發生的問題?我不知道。這個博客雖然有各種更新(包括從默認表CHARSET從latin1改爲utf8時的Wordpress版本2.1.3),並且已經遷移到各種機器上和從各種機器遷移過來,我想在某些時候,Wordpress必須將UTF-8編碼字符寫入具有latin1的CHARSET的數據庫,反之亦然。我知道我應該更加小心(是的,我已閱讀The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!))。

我怎麼確保這不會再發生?我確定我的編碼是一致的。所有MySQL表使用CHARSET utf-8和博客頁面集的頭部部分<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

回答

2

應該沒問題。最好的方法是如下:

  • 讓你的博客分貝
  • 加載轉儲到另一個數據庫
  • 執行替換臨時DB
  • 檢查!
  • 如果一切順利,在生產數據庫中執行它也是如此。
0

不要這樣做! 如果您確實需要更新/插入,請使用觸發器。

編輯:嗯,閱讀你的情況後,我會建議做一個數據庫的備份副本,並嘗試你所說的。我認爲它會起作用,只要你不打算再次這樣做(似乎是這種情況)

2

那麼,我會說它可能是最好的解決方案。

由於數據已使用錯誤的編碼存儲在線的某處,原始數據將丟失並且沒有真正的解決方案。你只需要嘗試從你所擁有的腐敗數據中挽救你所能做的。

如果它只是孤立於一個角色,那麼你很幸運。可能有字節代碼沒有轉換成任何可用的字符,所以如果發生在任何地方,你不會有可能識別的字符組合,你只需要用另一個或缺少的字符替換字符。只能手動發現。

1

當然你有一個編碼和另一個表中的數據。你可以在mysql中解決這個問題。 Check here