2016-05-06 20 views
2

このMySQLテーブルは、文字セットlatin1_swedish_ci(別名latin1)です。表中のキーワードと呼ばれるこのテキスト列フィールドに挿入する必要がUTF-8形式で:"不正な文字列値:" latin1列にUTF8テキストを挿入するとMySQLの問題が発生する

は今のところ、この着信コンテンツ(「\ ud55c \ ubc24 \ uc758」文字列)があります。

私はINSERTを実行しようとすると、私はこのエラーを取得:

Incorrect string value: '\xED\x95\x9C\xEB\xB0\xA4...' for column 'keywords' at row 1 

私は以下のようにUTF8からISO-8859-1に変換しようとする私のJavaコードでの方法のすべての種類を試してみましたそして、私はまだ同じエラーを取得しています:

String convertedString = new String(originalString.getBytes("UTF-8"), "ISO-8859-1"); 

私はlatin1のからUTF8にMySQLのテーブルの文字セットを変更するには言及してStackOverflowの上のソリューションがあります知っている、これはライブプロダクションですので、私は、残念ながらそれを行うことはできませんMySQLのマスターサーバーはまた、歴史的に私たちのlatin1を使用します。

この「不正な文字列値」エラーを修正する提案がありますか? UTF8文字列内の文字もLATIN1での表現を持って起こる...とlatin1のは小さなシングルバイト文字である場合を除き

おかげ は、あなたは、単に何をしようとして

+0

Java_をusc2からutf8に変更する必要があります。 'ISO-8859-1'は、あなたが見せているものには何も関係していません。あなたは「一泊」を望んでいた、正しい?こんにちはジェームズ、速い返答のために感謝します。 –

+0

usc2からutf8にエンコードを変更するとどういう意味ですか?申し訳ありませんが、私はフォローしていません。そして、はい、私は一泊に行きたいです – user1805458

+0

これは、古いUnicodeのテキストを別のMySQLデータベース(utf-8)から読み込み、このlatin1 MySQLデータベースに書き込む古いPythonスクリプトでしたが、このテキストには私のJavaコードで "\ ud55c \ ubc24 \ uc758"を "í•ë¤"〜 "に変換する方法を理解できれば、私は良いです – user1805458

答えて

0

ISは、可能ではありませんset(可能な文字数は合計で256未満)なので、大部分の有効なutf8文字には同等のlatin1表現がありません。

列の文字セットがサポートしていない文字を列に格納することはできません。それは、あるものから別のものへの「変換」の問題ではありません。

ユニコードが必要な場合は、少なくともutf8列が必要です。表を変更することは唯一の方法です。そうでなければ、符号なしの整数列に負の数を格納しようとするのと同様です。符号なし整数は負であってはいけません。これは変換の問題ではありません。

これは、文字データ型をサポートするすべてのRDBMSに当てはまりますが、MySQL固有の制限ではありません。

+0

マイケル、ありがとう応答。だから、このユニコードのテキストを別のMySQLデータベース(utf-8)から読み込んで、このlatin1 MySQLデータベースに書き込む古いPythonスクリプトがありました。このテキストは、次のように表示されます。私のJavaコードで "\ ud55c \ ubc24 \ uc758"を "í•ë¤"〜 "に変換する方法を見つけ出すことができます。 – user1805458

0

한밤は、한밤のMojibakeです。これは、それがある段階でlatin1に変換された場所です。しかし、\ud55c\ubc24はUnicodeです。 Pythonはどのモードですか?これは最初からありますか?

# -*- coding: utf-8 -*- 

More Python checklist

詳細

UTF8が好ましいです。おかしいです。しかし...問題は文字セットを選択することではなく、文字セットを指定する際にアプリケーション全体で一貫しています。

あなたはPythonを使用していますか?それはJavaのタグが付いていますか?

Java/JDBCの場合は、getConnection()呼び出しで?useUnicode=yes&characterEncoding=UTF-8が必要です。あなたはこれらを必要とする

  • バイト、あなたのクライアントには、六角ED959Cとしてutf8で、する必要があります。 (韓国語はすべてutf8では3バイトです)
  • クライアントとサーバーの接続はutf8である必要があります。接続直後にSET NAMES utf8を実行することは、これを行う別の方法です。
  • カラム/テーブルはCHARACTER SET utf8である必要があります。
  • htmlを使用している場合は、<meta charset=UTF-8>が必要です。

韓国語の場合、utf8mb4utf8と同程度です。上記の4つの箇条書きの項目を確認し、それらのすべてを行っていることを「証明」してください。

JSPおよびJavaサーブレットの場合、少し異なるadviceが必要です。

+0

こんにちはリック、はい、私は"# - * - coding:utf -8 - * - "Pythonファイルの先頭にある – user1805458

+0

チェックリストのリンクに便利なものは何ですか? –

+0

残念ながらまだありませんが、私はJavaコードで別の変換を使用しようとしました。 "新しい文字列(keywords.getBytes(" UTF-8 ")、" Cp1252 ")を使ってISO-8859-1の代わりにCp1252に変換しようとすると、何か興味深いことに気づいた – user1805458

関連する問題