MySQLテーブルに値を挿入しようとすると、この例外が発生する java.sql.SQLException: Incorrect string value: '\xC2\x99 Adm...' for column
\ xC2 \ x99は、2バイト文字のU + 0099(または\ u0099)にマップされています。ドキュメントから、3バイト以下の文字はMySQLのUTF-8でサポートされています。私はutfmb4についても読んでいますが、この文字は2バイトであり、まだこのエラーが出ているので、問題は別のものかもしれません。提案してください。MySQLのUTF-8文字サポート
答えて
デフォルト照合latin1_swedish_ci
を使用しているようですが、を使用する必要があります。これは、UTF-8
のデータを列に格納することを意味しています。
ALTER TABLE your_table CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
私が混乱するのは、U + 0099が実際にISO-8859-1エンコーディングに属していることです。私はいつもMySQLが適切な変換を行うと仮定していました。 –
@ÁlvaroGonzález、あなたは自動変換を意味しますか?そうではないと思います... select文であれば、特定の文字セットで照合するようにカラム結果を問い合わせることができますが、INSERTでは実際にはわかりません。 – Rahul
それは確かです。私はUTF-8クライアントを使用して、すべての種類の照合を使用してテーブル内のデータを正常に格納および取得します。どんなところでも、私はちょうどこれを説明できる奇妙な事実を思い出した。 –
を設定Character Sets and Collations in MySQL
にMySQLのマニュアルを参照してくださいあなたが照合文字を変更しALTER
コマンドを使用することができます文字U+0099(別名'<control>'
は)確かにencoded in Latin-1 aka ISO-8859-1ことができる(具体的には、それは0x99
だ)との接続がに表示されますUTF-8を使用するように正しく構成されている必要があります。 does not have a position for U+0099
mysql> SHOW CHARACTER SET like 'Latin1';
+---------+----------------------+-------------------+--------+
| Charset | Description | Default collation | Maxlen |
+---------+----------------------+-------------------+--------+
| latin1 | cp1252 West European | latin1_swedish_ci | 1 |
+---------+----------------------+-------------------+--------+
1 row in set (0.00 sec)
とWindows 1252:latin1
does not mean ISO-8859-1
:
私はこの問題は、MySQLのクセである疑いがある
(また、ラテン1と呼ばれる)ISO-8859-1は、Windowsと同じですコードポイント128-159(0x80-0x9F)を除いて、-1252( はCP1252と呼ばれます)。 ISO-8859-1は、この範囲内でいくつかの制御コードを割り当てます。 Windows-1252 には、これらのコードポイントに割り当てられた複数の文字、句読点、算術およびビジネス記号 があります。 MySQLのマニュアルのWest European Character Setsから
:
latin1のは、デフォルトの文字セットです。 MySQLのlatin1は Windows cp1252文字セットと同じです。これは、IANA latin1が0x80 と0x9fの間のコードポイントを "未定義"として扱う点を除いて、 公式ISO 8859-1またはIANA(Internet Assigned Numbers Authority) latin1と同じであることを意味します。 latin1、 これらの位置に文字を割り当てます。たとえば、0x80はユーロ 記号です。 cp1252の「未定義」エントリの場合、MySQLは0x81を Unicode 0x0081に、0x8dを0x008dに、0x8fを0x008fに、0x90を0x0090に、 を0x9dから0x009dに変換します。
要約すると、latin1
列を使用してそのような文字を格納することはできません。アプリで既にUTF-8を使用しているので、データベースをutf8
にアップグレードするか、さらにはutf8mb4
にアップグレードすることを検討する必要があります。
- 1. のMySQL UTF8文字SORRY
- 2. PHP MySQLの文字セットUTF8の問題
- 3. 無効なUTF8文字列MySQLデータベース
- 4. mysql 4 wtih latin1文字セットをutf8でmysql 5にマイグレーションする
- 5. QLPreviewControllerとUTF8文字
- 6. C++:utf8で代理文字をサポートする方法
- 7. カスタムURLスキームのutf8文字
- 8. Javaの:UTF8文字列
- 9. DjangoソースコードのUTF8文字
- 10. 文字列/ UTF8の問題
- 11. HTTPヘッダーのUTF8文字
- 12. mysqlのutf8以外の列の推奨文字セット
- 13. MySQLでの絵文字のサポート
- 14. mysql utf8-binフィールドを小文字/小文字に変換します。
- 15. フレンドリーなURLとUTF8文字
- 16. UTF8文字エンコーディング、htmlentities、クロスサイトスクリプティング
- 17. タイ文字をUTF8データベースに
- 18. mb_strtolowerとUTF8文字列
- 19. ゼロ幅キャレットナビゲーションUTF8文字
- 20. latin mysqlデータベースでUTF8文字が発生する
- 21. 磨き文字を格納するutf8 doctrine 2 PHP、MySQL、Zend Framework
- 22. mysqlで無効なutf8文字列をバイパスする方法
- 23. 一部のOpencartのモジュールはUTF8をサポートせず、????文字の代わりに
- 24. utf8でのスフィンクスの文字セットテーブル
- 25. UTF8の中国語の文字は?
- 26. yiiのutf8文字とhtmlspecialcharsのエラー
- 27. MySQL UTF8問題
- 28. MySQL UTF8 varcharカラムサイズ
- 29. UTF8文字列の文字数のカウント数?
- 30. asp.net文字エンコードの問題utf8
挿入を実行しようとしている列/テーブルのエンコーディングとは何ですか? –
MySQLは大量の文字セットとエンコーディングをサポートしていますが、何も推測しようとしません。プログラムは、接続に使用したい文字セット/エンコーディングをプログラムに通知する必要があります。 MySQLの[キャラクタセットサポート](http://dev.mysql.com/doc/refman/5.7/en/charset.html)の詳細を読む。 – axiac
@TimBiegeleisenごめんなさい正確なフィールドを確認するようにアドバイスしていますか?私はこのテーブル/列のcharacter_set_nameをチェックしてlatin1です。 –