講師:日本MySQLユーザ会/MySQL株式会社 松信嘉範氏
- 基本
- CP932、eucjpms、uft8のどれか
- デフォルトのlatin1は絶対ダメ
- 初心者のハマり所
- テーブル、カラムのキャラクタセットを正しく
- 文字化けの経緯を正しく調べる
- 格納で化けた?抽出で化けた?表示で化けた?
- インスタンス全体で統一する
- my.cnfで設定
- サーバー/クライアントの両方でキャラクタセットを設定する
- SHOW VARIABLES LIKE 'CHAR%'
- SET NAMES
- init_connect
- おすすめ
- character-set-server=文字コード
- skip-character-set-client-handshake
- クライアントは何も設定しない
- 変換せずに格納する方法
- prepared
- HEX記法
- binary
- 文字が正しく入ったか確認
- 自動再接続問題
- 接続中にサーバをリブートしたりすると、クライアントが自動再接続
- 文字コードがlatin1に戻ってしまう
- 文字欠落現象
- [文字1][文字コード範囲外の文字][文字2]
- ワーニング発生、[文字1]だけが格納され、範囲外の文字以降は切り捨てられる
- UTF-8 4バイト文字問題
- ShiftJIS + エスケープ + 0x5C(\)問題
- 「表」など、2バイト目に0x5Cを持つ文字が化ける
- 対処法
- ちゃんとCP932を設定する
- そもそもShiftJISを使わない
- バイナリデータとShiftJISで0x5C問題
- ダンプしたデータが破損
- mysqldumpに --hex-blobを付ける
- mysql_hex_stringを使おう!
- 多少容量が増えるが、データ破損よりマシ