2017-09-01 7 views
0

私は毎晩MySQLテーブルをロードするJavaプログラムでエラーを判断しようとしていました。ログ内のセディーダ - ñ - in mysqlテーブル

エラーがます。java.sql.SQLExceptionた:不正な文字列値: '\のXeF \ XBF \ XBD \のXeF XBF \ XBD ... \' 列 '管理者' の行1で。

最後に、フラットファイルから読み込んだ新しい名前(FRANÇOIS)が見つかりました。エラーを出していたセディラでした。プログラムはまだすべてをロードしましたが、そのフィールドを空白のままにしました。

私がSHOW FULL COLUMNS FOR tablenameを実行したとき、それはlatin1_swedish_ciでした。私は照合、charsetsについてほとんど知っていません。 これを受け入れるために照合順序を変更する必要はありますか?

答えて

0

(コメントありがとうございます)

詳細が必要です。

latin1は使用しないでください。 utf8を使用してください。 getConnection()コール

テーブルおよび/または列の定義で使用CHARACTER SET utf8?useUnicode=yes&characterEncoding=UTF-8

接続します。確認のためSHOW CREATE TABLEをご提供ください。

EFBFBDは、あなたがゴミを持ってきたことを意味する「置換」文字です。

フラットファイルの読み込み - Çという16進数をファイルから取得できますか? C7の場合はlatin1であり、負荷にlatin1を指定する必要があります。それはLOAD DATAですか?または、他の何か?

C387の場合、それはutf8です。良い。

もっと議論、デバッグ、ベストプラクティスなど:Trouble with utf8 characters; what I see is not what I stored

用語: "照合"(例えば、latin1_swedish_ci)が順番を並べ替えることをいいます。あなたの問題は "文字セット"(例えば、latin1またはutf8)です。

+0

SHOW CREATE TABLEステートメントは、デフォルトの文字セット(latin1)を使用したことを示しています。そのテーブルをuft8に変更するアクセスが許可されているかどうか、または特定の理由があった場合にはデフォルトがlatin1であるかどうかを確認する必要があります。 – BigRedEO

+0

これは古代の歴史です。最新のMySQLバージョンは、デフォルトでutf8mb4になります。それでも、各VARCHARに明示的に 'CHARACTER SET ...'を指定することができます。 –

+0

特定の列の文字セットを変更するにはどうすればよいですか?それは同じテーブルを使用しているかもしれない他のプログラムで問題を起こさないように最善の解決策になります。 – BigRedEO