これは私の質問hereの延長です。
リンク先の質問の詳細情報を収集するための簡単なテストで、phpMyAdmin インターフェイスを介してデータベースにアンパサンド文字を挿入しようとしました...
INSERT INTO `my_db`.`some_table` (`id`, `version`, `value`) VALUES (NULL, '0', '&');
...しかし、挿入されるのは、同等の HTML です&
。
データベースの照合順序はutf8_bin
、挿入するテーブルはutf8_general_ci
、アンパサンドを挿入しようとしているフィールドのタイプはvarchar
です。
&
生のアンパサンド文字を MySQL データベースに挿入するにはどうすればよいですか?
アップデート:
phpMyAdmin の何が問題なのかはわかりませんが、アプリケーションの問題を見つけたと思います。Hibernate が接続に正しい文字セットを使用していなかったようです。すでにカスタムの MySQL 方言を指定していたので、getTableTypeString
以下に示すようにメソッドを上書きしただけで、アプリケーションは MySQL に適切に値を挿入するようになりました。
class CustomMySQL5InnoDBDialect extends MySQL5InnoDBDialect {
@Override
public String getTableTypeString() {
return " ENGINE=InnoDB DEFAULT CHARSET=utf8"
}
}