ユーザーは、ブラウザの HTML フォーム入力に文字列を挿入します。この文字列はデータベースに保存されます。この文字列は、文字エンコーディングに基づいて各段階でどのようにエンコードおよびデコードされますか?
使用される技術スタックごとのフロー: browser --> ajax post --> spring mvc --> hibernate --> mysql db
ユーザーは、ブラウザの HTML フォーム入力に文字列を挿入します。この文字列はデータベースに保存されます。この文字列は、文字エンコーディングに基づいて各段階でどのようにエンコードおよびデコードされますか?
使用される技術スタックごとのフロー: browser --> ajax post --> spring mvc --> hibernate --> mysql db
ブラウザの投稿はURLエンコードされたUTF-8であると期待できます。Java JVM内では、文字列はUTF-16を使用するため、英語のテキストの場合のサイズは約2倍になります。Hibernateはその一部であり、次に説明するように接続文字列を渡しますが、エンコードについては実際には気にしません(hibernate.connection.url
プロパティ)。
次に、UTF-16文字列はJDBCドライバーによって変換されます。このドライバーは、MySQLの場合characterEncoding
、接続文字列内のプロパティを使用します。これがステートメントで宣言されたデータベースのエンコーディングと一致する場合、CREATE DATABASE
別の再エンコーディングを回避するのに役立ちます。
最後に、「ラテン語」は特定の文字セットまたはエンコーディングの名前ではありません。あなたはおそらくISO8859-1を意味し、Latin-1としても知られています。これは、英語以外のほとんどの文字列を表すことができないため、Webサーバーには適していません。データベースと接続文字列でUTF-8を使用する必要があります。最終的には、UTF-8-> UTF-16-> UTF-8になります。これは、安全で適度に効率的なシーケンスです(ブラウザ自体)。
UTF-8を使用するようにデータベースを変更する場合は、テーブルレベルでのエンコーディングの変更にも注意してください。各テーブルは独自のエンコーディングを使用する場合があり、自動的に変更されることはありません。