ServletでPOSTの値を受け取ってMySQLにinsertするプログラムを書いていたのですが、日本語の値が文字化けていました。
かなり悩んでMySQLの設定をいじってみたりしましたが、どうしても文字化ける・・・
悩むこと4時間・・・。
いろいろと試してみたけど解決できない。
そんなとき、ふと、思いついたのです。
そもそも、POSTされてきている値が文字化けてるんじゃないかと。
どうやら当たりのようです。
POSTされてきている値をSystem.out.printlnでログに出してみると・・・
文字化けてました。
結局「request.setCharacterEncoding(“Windows-31J”);」で文字コード指定しないせいで文字化けてました・・・。
なんか自分が本当にいやになりました。
Windows環境でMySQL設定とかしたことなかったので、絶対MySQLのせいで文字化けていると決め付けてしまったのが今回の最大の敗因だと思います。
文字コードの確認
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
SHOW VARIABLES LIKE 'character_set_%';
+--------------------------+--------+
| Variable_name | Value |
+--------------------------+--------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
+--------------------------+--------+
7 rows in set (0.01 sec)
|
テーブルの文字コードの確認
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
show create table てーぶる;
+-------+------------------------------------------------------
---------------------------------------------------------------
| Table | Create Table
+-------+------------------------------------------------------
---------------------------------------------------------------
| てーぶる | CREATE TABLE `bbs` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`description` text,
`create_date` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8 |
+-------+------------------------------------------------------
---------------------------------------------------------------
1 row in set (0.00 sec)
|
JDBCの設定
1
|
jdbc:mysql://localhost/javatest?characterEncoding=Windows-31J&user=ユーザー名&password=パスワード
|
とりあえず、Servletで簡単な掲示板的なあれを書いてみました。
あとは入力値チェックとか書いてみたら、Strutsとかさわりはじめようと思います。
てかほんと、Javaだと掲示板作るのにたくさんコード書かなければいけないんですね。
PHPのほうが楽ですww