중국어를 해결 MySQL의 인코딩 문제

데이터베이스가 될 때 한자를 통해 마이크로 편지 애플릿 패스 "???"이 문제의 비용을 해결하기 위해 : 최근에, 자바 (서블릿) + MySQL을 사용 그가 문제를 만났을 때 마이크로 편지 무대 애플릿을 달성하기 위해 나는 일부러 내 솔루션 아이디어와 프로세스를 기록하기 위해 블로그를 열고, 칠십팔시간에 대해 보냈다.

1. 우선, 상기 송신 요구 헤더는 마이크로 채널 애플릿이 기록되는지 확인 :

헤더 : {
         '콘텐츠 유형': '을 application / x-www-form-urlencoded를이' , 
      }

나를 보내 우리의 작은 프로그램은 결국 요청이 어떤 인코딩 형식입니다 마이크로 채널 애플릿을 모르는 따라서 응용 프로그램 / x-www-form-urlencoded를하지 문자 인코딩 형식 (문자 집합) 설정을 설정하고합니다 ......

시도하는 최초의 인공 후 ...... 마이크로 채널 애플릿을 사용하여 서버에 데이터를 삽입하는 요청을 시작, 나는 로그 Tomcat 서버에 다음을 발견 :

GET / dailyLife / API / 습관 / updatehabit? ID = 0 NAME = % E6 % B5 % 8B % E8 % AF % 95Aa3 및 아이콘 = 4 종류 = 1 주일 = 4 = 토큰 0a6fff2b9ec2058eee0d26df51846497 HTTP / 1.1

매개 변수 이름은 내 작은 프로그램 종료 입력 중국어 인 경우, 당신은 인코딩 형식 지정되지 않은 시간에 볼 수있는 매개 변수의 이름를 urlencode입니다 ...... 그리고 내 자바 코드를 처리하기 위해 UTF-8 문자열에 따라 다시 넣어 ... 요청이 헤드 플러스 캐릭터 = UTF8을 보낼 때 ...이 불균일 인코딩 형식 귀착되었다 (이 문제를 해결하기 위해, 그것이, 즉,이 프로그램의 작은 쪽을 수정함으로써 수행 될 수 Ya_ 콩나물 참조 블로그 HTTPS /를 /www.cnblogs.com/i-douya/p/8245359.html ),하지만 난 여기가 발생하면은 서버 측에서 조정할 수 있습니다, 애플릿 측 코드를 수정하지 않으려 고하는 것입니다

서버 측 조정 2. 자바 코드

URLDECODE이 즉시 완료 자바 URLDecoder를 사용할 수있는 매개 변수를 획득 한 후, 바람 남자 유의 블로그를 볼 수 있습니다 일단 서버 측에서 조정한다면, 우리는 그것을 필요로 https://blog.csdn.net/을 xiazhiyu_whu / 기사 / 세부 / 79708431

서블릿에 반영 :

문자열 이름 = req.getParameter ( "이름" ); 
이름 = URLDecoder.decode (이름, "UTF-8");

이 프로세스의 이름 후 UTF-8 형식이며, (단지 그것을 변수 음의 비트 값이 아니라 같은 이름의 ...... 양의 변화를 수정) 후속 코드의 구현에 영향을 미치지 않습니다

여기에 덧붙여 : 공식 Java 문서에서 표준 문자처럼 사용할 수있는 두 번째 인수 디코딩 방법 URLDecoder 매개 변수로 UTF-8 설정이 다음과 같이 대부분의 공식은 이제 메소드를 호출해야합니다 :

문자열 이름 = req.getParameter ( "이름" ); 
이름 = URLDecoder.decode (이름을 StandardCharsets.UTF_8);

( "표준 문자 집합 클래스는 내 서버의 JDK 버전 8, 설명하기 위해 더 많은 JDK10이 필요합니다, 그래서 UTF-8 디코딩 기능과 같은 설정 표준 문자를 사용하여 두 번째 매개 변수를 필요는 없지만, 문자열의 직접 사용 UTF-8 ")

서블릿 문제를 수정 한 후 3. (완료되지 디코딩 또는 기타 문제 등을) 내가 질문을 내 의심 서블릿 논리를 가지고, 해결되지 않은 남아 있고, 나는 다시 한 번에 로그를 삭제 한 후 톰캣 로그는 조금 문제가 보인다 로그를 작성하지 않는이 일시적으로 문제가 해결되지 않습니다. 그래서 디버깅 자바 수준의 인공 로그에 가입하기로 결정

서블릿에 기능을 추가하기 위해 로그를 추가하는 방법은 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했다

다음과 같이 코드 변경 :

String name = req.getParameter("name");
LogUtil.print("param:" + name + "\n");
name = URLDecoder.decode(name, StandardCharsets.UTF_8);
LogUtil.print("after:" + name + "\n");

更新了服务端代码之后,通过浏览器调用接口,进行了一些添加操作,然后我的日志文件里面的内容……竟然是这个样子的……????!!!

param:测试

after:测试

param:测试2

after:测试2

param:不想测了

after:不想测了

 我惊了……这什么情况……我觉得可能是浏览器自动把我输入的urlencode帮我转码了(这么想的我大概是疯了emmmmm)……

然而我直接在Java中把name写死成“%e6%b5%8b%e8%af%952”,结果从日志来看,程序还是正常运行的……

于是我费了很大力气……又跑到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