UTF-8 の代わりにラテン文字セットを使用して設定されたテーブルがいくつかあり、テーブルに不適切な文字を入力することができました。通常の原因は、人々が Word または Outlook からコピー/貼り付けして、これらの厄介な隠し文字をコピーすることです...
これらの文字を識別してきれいにするために使用できるクエリはありますか?
ありがとう、
UTF-8 の代わりにラテン文字セットを使用して設定されたテーブルがいくつかあり、テーブルに不適切な文字を入力することができました。通常の原因は、人々が Word または Outlook からコピー/貼り付けして、これらの厄介な隠し文字をコピーすることです...
これらの文字を識別してきれいにするために使用できるクエリはありますか?
ありがとう、
I assume that your connection chacater set was set to UTF8
when you filled the data in.
MySQL
replaces unconvertable characters with ?
(question marks):
SELECT CONVERT('тест' USING latin1);
----
????
The problem is distinguishing legitimate question marks from illegitimate ones.
Usually, the question marks in the beginning of a word are a bad sign, so this:
SELECT *
FROM mytable
WHERE myfield RLIKE '\\?[[:alnum:]]'
should give a good start.
おそらく、この「バグ」のようなものに気付いているでしょう。「悪い文字」は、UTF-8 制御文字 (例: \x80) である可能性が最も高いです。次のようなクエリを使用してそれらを識別できる場合があります
SELECT bar FROM foo WHERE bar LIKE LOCATE(UNHEX(80), bar)!=0
そのリンクされたバグから、タイプを使用しBLOB
て Windows ファイルからテキストを保存することをお勧めします。
Windows ファイル (テキスト ファイルであっても) を格納する必要がある場合は、TEXT の代わりに BLOB (追加のエンコード フィールドを含む) を使用します。3 バイト UTF-8 および多層エンコーディングのオーバーヘッドよりも優れています。
こちらの Q/Aをご覧ください(クライアント エンコーディングに関するすべてですSET NAMES
) 。