前のLOAD DATA INFILE
は、CSVファイルがlatin1
- encoded。このインポート中に、マルチバイト文字は2つの単一文字として解釈され、utf-8を使用してエンコードされます(再び)。
この二重エンコードにより、ñ
の代わりに ñ
。
これらの文字列を修正するには?
次のMySQL関数は、二重エンコード後に正しいutf8文字列を返します。
CONVERT(CAST(CONVERT(field USING latin1) AS BINARY) USING utf8)
UPDATE
ステートメントと共に使用して、フィールドを修正できます。
UPDATE tablename SET
field = CONVERT(CAST(CONVERT(field USING latin1) AS BINARY) USING utf8);
上記の回答は私のデータの一部で機能しましたが、実行後に多くのNULL列が生じました。私の考えは、変換が成功しなかった場合、nullを返します。それを避けるために、小さなチェックを追加しました。
UPDATE
tbl
SET
col =
CASE
WHEN CONVERT(CAST(CONVERT(col USING latin1) AS BINARY) USING utf8) IS NULL THEN col
ELSE CONVERT(CAST(CONVERT(col USING latin1) AS BINARY) USING utf8)
END