中国を解決するMySQLのエンコーディングの問題

データベースになるだろうと、「???」、この問題のコストを解決するために、中国語の文字の上にマイクロ手紙アプレットパス:彼は問題に会ったとき最近、Javaの(サーブレット)+ MySQLの使用は、マイクロ手紙舞台裏アプレットを達成するために私は故意に私の解決策のアイデアやプロセスを記録するためにブログを開設、約70八時間を過ごしました。

1.まず、送信要求ヘッダーは、マイクロチャネルアプレットが書かれているか確認します。

ヘッダ:{
         'コンテンツタイプ': 'アプリケーション/ x-www-form-urlencodedで' 
      }、

私たちの小さなプログラムのみのアプリケーション/ x-www-form-urlencodedではなく、文字エンコーディング形式の(文字セット)のセットを設定するには、そのためのマイクロチャネルアプレットが最後にリクエストが何をエンコード形式で送ってくれたかわからない......

しようとする最初の人工の後......マイクロチャネルのアプレットを使用してサーバーにデータを挿入するための要求を開始し、私はログTomcatサーバーで、次のが見つかりました:

GET / dailyLife / API /習慣/ updatehabit?ID = 0&名=%E6%B5%8B%E8%AF%95Aa3&アイコン= 4&カテゴリ= 1&平日= 4&トークン= 0a6fff2b9ec2058eee0d26df51846497 HTTP / 1.1

パラメータ名が入力を終了し、私の小さなプログラムで、中国である場合は、あなたがエンコード形式指定されていない時間に見ることができ、パラメータの名前でurlencodeです......そして、私のJavaコードは、バックに対処するため、UTF-8文字列にしたがって入れて...リクエストがヘッドプラスのcharset = UTF8に送信されたときに...これは不均一なエンコード形式になりました(この問題を解決するために、それは、つまり、プログラムの小端部を変更することによって行うことができ、Ya_もやしを参照してくださいブログのhttps:/を/www.cnblogs.com/i-douya/p/8245359.html)、しかし、私はここに遭遇したアプレット側のコードを変更しないようにしようとすることです、それだけで、サーバー側で調整することができます

サーバー側のチューニング2. Javaコード

urldecodeはすぐにあなたが完了するために、JavaのURLDecoderのを使用できるパラメータを、取得した後、風の男湯のブログを確認できたら、サーバー側で調整した場合、我々はそれを必要とするhttps://blog.csdn.net/をxiazhiyu_whu /記事/詳細/ 79708431

サーブレットに反映。

文字列名= req.getParameter( "名前" );
名前 = URLDecoder.decode(名前、 "UTF-8");

このプロセスの名前がUTF-8形式である、とフォローアップのコードの実装には影響しませんした後に(ちょうど変数まあのビット値、ない......のような名前の量の変化、それを修正します)

ここでところで:公式Javaドキュメント、パラメータとして標準文字セットUTF-8のように使用することができる第二引数のデコード方法URLDecoderのから、これは今ではほとんど正式である必要があり、次のようにメソッドを呼び出します。

文字列名= req.getParameter( "名前" );
名前 = URLDecoder.decode(名前、StandardCharsets.UTF_8)を、

(「標準的な文字セットのクラスは私のサーバーのJDKのバージョンは8で、説明するよりJDK10を必要とするので、私はUTF-8デコード機能などのような標準文字セットを使用して2番目のパラメータはありませんが、文字列を直接使用UTF-8「)

サーブレットの問題を修正した後3.(完全ではないデコードやその他の問題などを行う)私は質問に私の疑問サーブレットロジックを持っていた、未解決のままであり、私はもう一度上のログをクリアした後、Tomcatのログは、少し問題ですログを書いていない、これは一時的に問題を解決していません。だから私は、デバッグにJavaレベル人工ログに参加することを決めました

サーブレットに機能を追加するために、ログを添加する方法は、jQueryの中国のネットワークを参照してください。http://www.jquerycn.cn/a_18338

:使用する標準のロガーは、このブログのエントリで見つけることができますhttps://blog.csdn.net/gruhgd/article/details/84026217

ここで私が使用して静的メソッドとして実装され、LogUtilツールを作成することです:

パブリック静的ボイドプリント(文字列メッセージ){
    PrintWriterのうち = nullをしてみてください{
        アウト = 新しい PrintWriterの(新しいのFileOutputStream( "/ルート/ log.txtという"、真の));
        out.printlnを(メッセージ)。
        out.close();
    } キャッチ(にFileNotFoundException電子){
        e.printStackTrace();
    }
}

そして、パラメータ名のコードを簡単にデバッグ(注意することは、いくつかのログを追加されます:言葉を使うならば実際には、ここでのデバッグも実行するためにリモートでデバッグのIntelliJアイデアを使用することができ、ログに私よりもずっと簡単にデバッグするために行くだろうが、私はよくないよ、私たちは)emmmmmmを持っていました

次のようにコードを変更します。

文字列名= req.getParameter( "名前" );
LogUtil.print( "PARAM:" +名+ "\ n"は);
名前 = URLDecoder.decode(名前、StandardCharsets.UTF_8)を、
LogUtil.print( "後:" +名+ "\ nを");

サーバー側のコードを更新した後で、私のログファイルの内容は、内部の......このようなことが判明し、追加操作の数のために、ブラウザインタフェースを介して呼び出された......?

PARAM:テスト

後:テスト

PARAM:テスト2

後:テスト2

PARAM:テストする必要はありません

後:テストする必要はありません

 私は...... ......これは私がそれは私が(たぶん私はクレイジーだと思うemmmmm)トランスコードを支援するために入力URLENCODE自動的に私のブラウザかもしれないと思うものですショックを受けた......

しかし、私は「%E6%B5%8bは%E8%AF%952」を死ぬためにJavaで書かれた名前を指示し、ビューのログからの結果は、プログラムがまだ実行されている......

だから私は、その後、Windowsのシステムに行ってきました......多くの労力を費やした小型マイクロチャネルプログラムで数回を追加する要求を発行し、結果は同じです......

这啥情况啊……

4. 思来想去……觉得可能是MYSQL的编码格式的锅……

以下开始正文.jpg

正文全都是引用其他人的链接.png

如何解决MySQL的字符编码格式问题呢?这么一些方案吧……各大的步骤都做一遍大概就好了……

一、创建数据库时修改字符编码格式为utf8

查看数据库编码格式:

mysql> show variables like 'character_set_database';

创建数据库时指定编码格式:

mysql>create database <数据库名> character set utf8;

修改数据库编码格式:

 

mysql>alter database <数据库名> character set utf8;

 

二、创建表时修改字符串编码格式为utf8

查看表编码格式:

mysql> show create table <表名>;

创建表时指定编码格式:

 create table <表名> (BLABLABLABLABLA……) default charset = utf8;

修改表的编码格式:

mysql>alter table <表名> character set utf8;

三、修改MySQL中的charset设置

我想我遇到的问题大概跟这篇博客一样?https://www.cnblogs.com/slow/p/3222933.html

我也跑了一下这个命令……确实里面是有latin的……

MySQL中的各项charset的含义可以参照博客:https://blog.csdn.net/sun8112133/article/details/79921734

但修改charset的方法请不要学习……直接set charset这种方法亲测不可行……退出mysql再登陆刚改的就没了……

修改charset的方法请参见https://blog.csdn.net/mynamepg/article/details/81044957

(不过大概是因为我的服务器是个centos的缘故,我的服务器的my.cnf文件路径与博客中的不同……用find命令找一下会发现my.cnf就直接在etc文件夹里放着……)

四、将涉及到中文的字段的编码格式手动改成utf-8

参见百度经验https://jingyan.baidu.com/article/17bd8e527b9b5785ab2bb892.html

我的服务器没有可视化界面,因此采用的是该篇经验最后的执行SQL语句的方案

 

 

第四步执行完成后……我的……中文……编码……问题……终于……解决了……(趴)


碎碎念:

 

至于为什么折腾了快八个小时呢?

我的Java后台在Ubuntu的Idea上写……但是微信小程序开发工具和xshell、xftp都在Windows上……

所以每次修改完后台以后都要发布war包然后挂到服务器上,然后切换到windows系统上进行检验,有不对的地方再切回Ubuntu

我这一下午重启了10+次吧……电脑启动还很慢……太痛苦了!!!!!!!

简直了!!!!简直了!!!简直了!!简直了!

这个环境等我闲下来我一定整合一下……

 

おすすめ

転載: www.cnblogs.com/Briddle-ch/p/10987450.html