私のデータベースはまたは'��"'
(私の端末がそれぞれlatin1またはunicodeに設定されているかどうかによって異なります)でいっぱいです。文脈から、私はそれらがemdashesであるべきだと思います。 IEでレンダリングされた(またはレンダリングされなかった)とき、彼らは厄介なバグを引き起こしているようです。私はそれらを見つけて交換したいと思います。問題は、âも もreplace
と一致しないことです。クエリの実行:mysql内のガベージ文字を置き換えてください
エラーなしで実行しますが、何もしません(0行が変更されました)。私が端末にコピーしたとき、「ダイヤモンドの疑問符」の文字が一致していないことは明らかです。そのコードを見つけてそれを何かにマッチさせる方法はありますか? mysql
コンソールは、これを1行で行うことができるほど近くにあります。だから私はそれを避けることができれば、端末の外でそれをスクリプト化したくないでしょう。
dbはホストされているAmazon RDSなので、ここで他の質問で参照したregexp udfをインストールすることはできません。長期的には、データベース全体をutf8に適切に変換する必要がありますが、このレンダリングの問題を直ちに解決する必要があります。
EDIT:
私はhexdump
と悪い文字を分離しましたが、それはE2 80(私はこれは任意のUnicode文字に対応しないと思います)です。それをどのようにして置換関数に与えることができますか?
update TABLE set COLUMN = replace(COLUMN, char(0xe2,0x80),'---');
は何もしません。
latin1になる理由はありますか?私は現在、デフォルトでUnicodeを使用する傾向があります。変換するのは難しいことではありません.DBをSQLにダンプし、utf8を使用する新しいデータベースにリロードしてください。 –
私はそれを継承しました。ダンプは、私が避けたいと思うかなりのダウンタイムを伴うため、望ましくありません。私はhttp://nicj.net/2011/04/17/mysql-converting-an-incorrect-latin1-column-to-utf8のようなインプレース・メソッドを読んできましたが、それを適応させる時間はありませんでした私のdbに。 – mmdanziger
これ以外の選択肢はないかもしれませんが、この問題のある文字シーケンスを持つ行をすべて探し、それぞれの文を手作業で修正してください(ただしスクリプトはこれを行うのに役立ちます)。 – staticsan