5

途中のどこかで、私が行ったすべてのインポートとエクスポートの間に、私が実行しているブログのテキストの多くは、奇妙なアクセントのあるA文字でいっぱいです。

mysqldumpを使用してデータをエクスポートし、検索と置換を使用して不良文字をクリアする目的でテキストエディターにロードすると、検索はすべての「a」文字に一致します。

MySQLで直接、またはmysqldumpを使用してコンテンツを再インポートすることにより、これらの文字を正常に追跡して削除する方法を知っている人はいますか?

4

3 に答える 3

14

これはエンコーディングの問題です。これは、 Latin1で表示されるUnicodeÂのノーブレークスペース(HTMLエンティティ)です。 

次のようなことを試してみてください...最初に、マッチングが機能していることを確認します。

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

これにより、文字が不適切な行some_tableが返されます。some_fieldそれが正しく機能し、探している行が見つかったと仮定して、これを試してください。

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

そして、それはそれらの文字を削除するはずです(リンクしたページに基づいて、文の間に3つのスペースが続くなど、実際にはnbspは必要ありません。1つだけにする必要があります)。

それが機能しない場合は、使用されているエンコーディングと照合を確認する必要があります。

BINARY編集:文字列に追加されました。これにより、エンコーディングに関係なく機能するようになるはずです。

于 2012-05-09T19:45:48.533 に答える
1

受け入れられた答えは私にはうまくいきませんでした。

ここから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;

上記のクエリはそれをスペースに置き換えます。その後、通常のトリムを適用するか、単に '' に置き換えることができます。

于 2014-12-03T03:25:00.827 に答える
0

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

私の場合、継承したWordpressデータベースでこの問題が発生し、Wordpressで機能する事前に形成されたクエリの便利なセットを見つけましたhttp://digwp.com/2011/07/clean-up-weird-データベース内の文字/

そもそもこの問題の原因の 1 つは、データベースをテキスト エディタで開くことであり、エンコーディングが何らかの方法で変更される可能性があることにも注意してください。そのため、テキスト エディタではなく MySQL のみを使用してデータベースを操作できる場合は、さらなる問題が発生するリスクが軽減されます。

于 2014-04-26T20:17:27.697 に答える