Mysqlエラー問題レコード

1197 ワード

① Incorrect string value: '\xE6\x94\xBE\xE5\xA4\xA7...' for column 'name' at row 1 Query……
原因:符号化が一致しない.データベースはlatin 1符号化であり、挿入された中国語文字列はutf-8符号化である.
解決方法:
一、データベースの符号化を修正する.
この解決策は一労永逸で,大量の符号化変換作業を省く.データベース構成パラメータを次のように設定する必要があります.
データベースプロファイルmyを開きます.ini(Windows)または/etc/my.cnf(Linux).
次のパラメータを変更または追加します.
[mysql]タブに行を付ける
default-character-set = utf8
[mysqld]タブに3行追加
default-character-set = utf8
character-set-server = utf8
collation-server = utf8_general_ci
init_connect = 'SET collation_connection = utf8_general_ci'
init_connect = 'SET NAMES utf8' 
[mysql.server]タブに行を追加
default-character-set = utf8
[mysqld_safe]タブに行を追加
default-character-set = utf8
[クライアント]タブに行を追加
default-character-set = utf8
二、挿入した中国語文字の符号化を変換する.
中国語文字列src Strを挿入する場合は、次の文字列に変換する必要があります.
String insertStr = new String(srcStr.getBytes("utf-8"),"iso-8859-1");

この考え方は文字列を取り出す際にもう一度符号化を変換する必要があるので,第1の解決策を推奨する.
 
PS:実は変換時にもう一つの問題があったのは、HttpServeretRequestで印刷された符号化フォーマットがutf-8で、実際に変換符号化する際にgb 2312を使っていたのですが...なぜかご存知の方いらっしゃいますか?