2012-05-09 10 views
5

途中で、私が行ったすべてのインポートとエクスポートの間に、実行しているブログのテキストの多くが奇妙なアクセントのあるA文字でいっぱいです。たとえば、次のようにMySQLデータから奇妙な文字を削除する

http://teamsoell.com/andy/petnames(リベットコンテンツ、私が知っている)

は私が悪いの文字をクリアすると置換検索をmysqldumpをを使用してデータをエクスポートして使用することを意図して、テキストエディタにロードすると、検索はすべての "a"文字と一致します。

誰でも、これらの文字を正常に狩り、それらをMySQLで直接削除するか、mysqldumpを使用してコンテンツを再インポートする方法を知っていますか?

+0

文字の厳密なバイナリ比較が可能なテキストエディタを使用する必要があります。 UTF-8対応のものは 'a'と同じものを 'Â'と考えます –

+0

推奨事項はありますか?私はOS Xアプリケーションを好むだろうが、必要ならばWindows 7マシンにアクセスできる。 –

答えて

8

これはエンコードの問題です。 Âは、Latin1で表示されているUnicodeの改行なしスペース(HTMLエンティティ )です。

あなたは...まず、我々はマッチングが働いていることを確認するためにチェックし、このような何かを試してみてください:

SELECT * FROM some_table WHERE some_field LIKE BINARY '%Â%' 

これはsome_fieldが悪い性格を持っているsome_table内の任意の行を返す必要があります。それが正常に動作し、あなたが探している行を見つけると仮定すると、これを試してみてください。

UPDATE some_table SET some_field = REPLACE(some_field, BINARY 'Â', '') 

をそして、それはあなたがリンクされたページに基づいて、(それらの文字を削除する必要があり、あなたは本当にあなたのようにそこNBSPはしたくありません文章などの間に3つのスペースが連続すると、1つしかないはずです)。

動作しない場合は、使用されているエンコードと照合を確認する必要があります。

EDIT:文字列にBINARYを追加しました。うまくいけばエンコーディングに関係なく動作するはずです。

+0

あなたが最初に提案したクエリを試しましたが、ターミナルアプリケーションに貼り付けると "Â"文字が取り除かれます。しかし、これは私に見える良い方向を与えてくれました。 –

+0

ああ、それはもっと痛みを増します...私は通常、MySQL Workbenchを使用します。データベースサーバにsshできるのであれば、SSHトンネルでMySQL Workbenchを使用することができます。 –

+0

ああ、私はSequel Proを持っていて、そのクエリがそこで動作します。素晴らしい、ありがとうございました!私は手作業で何百もの投稿を修正することにほとんど辞めていました。 –

0

私はこの問題を抱えていますが、それは厄介ですが解決できます。同様に、次のようなデータに文字が表示されることがあります。 「 」これはデータベースのエンコーディングの変更に関連していますが、これらの文字が(ユーロ記号を実際に使用している場合など)データベースを保存したい場合は、以前に提案されたようないくつかのMySQLコマンドを使用してそれらを削除することができます。

私の場合は私が継承されていたWordpressのデータベースでこの問題を抱えていた、と私はWordpressのために働くの事前成形されたクエリの便利なセットを発見し、ここでhttp://digwp.com/2011/07/clean-up-weird-characters-in-database/

また、原因の1つを注目に値しますテキストエディタでデータベースを開き、何らかの方法でエンコーディングを変更する可能性があります。したがって、MySQLを使用し、テキストエディタを使用せずにデータベースを操作する可能性がある場合、これはさらなる問題を引き起こすリスクを軽減します。

0

私には受け入れられた回答は機能しませんでした。

ここからhttp://nicj.net/mysql-converting-an-incorrect-latin1-column-to-utf8/私はÂ文字のバイナリコードがc2a0であることを発見しました。(その列をVARBINARYに変換し、それがどのように変わるかを調べることによって) そして、ここhttp://www.oneminuteinfo.com/2013/11/mysql-replace-non-ascii-characters.htmlは、それを削除(置き換え)する実際の解決策を見つけた:

update entry set english_translation = unhex(replace(hex(english_translation),'C2A0','20')) where entry_id = 4008; 

上記のクエリは、通常のトリムを適用することができ、あるいは単に代わりに「」に置き換え、スペースに置き換えます。

関連する問題