0

ユーザーは、ブラウザの HTML フォーム入力に文字列を挿入します。この文字列はデータベースに保存されます。この文字列は、文字エンコーディングに基づいて各段階でどのようにエンコードおよびデコードされますか?

使用される技術スタックごとのフロー: browser --> ajax post --> spring mvc --> hibernate --> mysql db

4

1 に答える 1

0

ブラウザの投稿は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を使用するようにデータベースを変更する場合は、テーブルレベルでのエンコーディングの変更にも注意してください。各テーブルは独自のエンコーディングを使用する場合があり、自動的に変更されることはありません。

于 2012-06-17T22:11:43.877 に答える