>  기사  >  Java  >  mysql에 삽입된 잘못된 데이터에 대한 Java 솔루션

mysql에 삽입된 잘못된 데이터에 대한 Java 솔루션

黄舟
黄舟원래의
2017-09-21 10:03:471762검색

이 글은 주로 Java가 mysql에 잘못된 데이터를 삽입하는 문제에 대한 해결 방법을 자세히 소개합니다. 관심 있는 친구는 이를 참조할 수 있습니다.

Java가 mysql에 잘못된 데이터를 삽입하는 문제를 해결하는 방법은 무엇입니까?

MySQL 기본 인코딩은 latin1입니다


mysql> show variables like 'character%'; 
+--------------------------+--------------------------+ 
| Variable_name      | Value          | 
+--------------------------+--------------------------+ 
| character_set_client   | latin1          | 
| character_set_connection | latin1          | 
| character_set_database  | latin1          | 
| character_set_filesystem | binary          | 
| character_set_results  | latin1          | 
| character_set_server   | latin1          | 
| character_set_system   | utf8           | 
| character_sets_dir    | D:\MySQL\share\charsets\ | 
+--------------------------+--------------------------+

데이터 테이블 생성 및 데이터 삽입


mysql> use test; 
mysql> create table messages ( 
  -> id int(4) unsigned auto_increment primary key, 
  -> message varchar(50) not null
  -> ) engine=myisam default charset=utf8; 
mysql> insert into messages (message) values ("测试MySQL中文显示"); 
mysql> select * from messages; 
+----+-------------------+ 
| id | message      | 
+----+-------------------+ 
| 1 | 测试MySQL中文显示 | 
+----+-------------------+

프로그램 작성(Java)


import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.Statement; 
 
public class JDBCTest { 
  public static void main(String[] args) { 
    String driver = "com.mysql.jdbc.Driver"; 
    String url = "jdbc:mysql://localhost:3306/test"; 
    String user = "root"; 
    String password = "root"; 
 
    try { 
      Class.forName(driver); 
      Connection conn = DriverManager.getConnection(url, user, password); 
      Statement stmt = conn.createStatement(); 
      stmt.executeUpdate("insert into messages (message) values ('测试MySQL编码')"); 
      ResultSet rs = stmt.executeQuery("select * from messages"); 
      while (rs.next()) { 
        int id = rs.getInt("id"); 
        String message = rs.getString("message"); 
        System.out.println(id + " " + message); 
      } 
 
      rs.close(); 
      stmt.close(); 
      conn.close(); 
    } catch (Exception e) { 
      e.printStackTrace(); 
    } 
  } 
}

프로그램 출력


1 ?? ??MySQL??  
데이터베이스를 사용하면 중국어를 정상적으로 추가해서 표시할 수 있지만, 접속하는 프로그램을 사용하면 중국어를 정상적으로 표시할 수 없는 것을 알 수 있습니다. 이렇게 하려면 MySQL의 기본 인코딩을 수정하고 my.ini(MySQL 구성 파일) 파일을 편집하여 인코딩을 수정해야 합니다.


MySQL의 기본 문자 집합을 utf8로 설정하고 클라이언트 구성 [ 클라이언트]를 선택하고 아래에 추가하세요.

default-character-set=utf8

서버 구성[mysqld]을 찾아 아래에 추가하세요

default-character-set=utf8

MySQL 데이터베이스를 utf8 인코딩으로 실행하도록 설정하고 utf8을 사용하세요 MySQL 데이터베이스에 연결할 때 Encoding

MySQL을 중지하고 다시 시작


net stop mysql
net start mysql
데이터베이스에 다시 연결하고 인코딩, 데이터 테이블 콘텐츠 보기

mysql> show variables like 'character%'; 
+--------------------------+--------------------------+ 
| 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           | 
| character_sets_dir    | D:\MySQL\share\charsets\ | 
+--------------------------+--------------------------+ 
mysql> use test; 
mysql> select * from messages; 
+----+-------------------------------+ 
| id | message            | 
+----+-------------------------------+ 
| 1 | 虏芒脢脭MySQL脰脨脦脛脧脭脢戮       | 
| 2 | ??MySQL??           | 
+----+-------------------------------+

여기 디스플레이가 여전히 깨져 있습니다. 이전에 사용된 다른 인코딩 중 이전에 작성된 프로그램을 다시 실행하십시오. java JDBCTest


1 ????MySQL????????

2 ??MySQL?? 3 MySQL 코딩 테스트


세 번째 레코드에서 이제 데이터베이스에 연결할 때 프로그램이 정상적으로 중국어를 추가하고 표시할 수 있음을 알 수 있습니다.


mysql> select * from messages; 
+----+-------------------------------+ 
| id | message            | 
+----+-------------------------------+ 
| 1 | 虏芒脢脭MySQL脰脨脦脛脧脭脢戮       | 
| 2 | ??MySQL??           | 
| 3 | 娴嬭瘯MySQL缂栫爜         | 
+----+-------------------------------+

데이터베이스 표시를 다시 보면 왜 표시되는지 알면 매우 놀랄 것입니다. 문자가 모두 깨졌습니다. 이는 주로 Windows의 명령줄과 관련이 있습니다. 인코딩과 관련하여 명령줄에서 속성->옵션의 현재 코드 페이지를 확인하세요: 936(ANSI/OEM - 중국어 간체 GBK) 내 컴퓨터에 표시됩니다)

즉, 명령줄에서는 GBK 인코딩이 사용되는데 프로그램 연결 시 utf8을 사용하여 추가했기 때문에 문자가 깨질 수 있습니다. 이제 클라이언트 인코딩을 gb2312로 변경해 보겠습니다. 또는 gbk를 사용해 보세요


mysql> show variables like 'character%'; 
+--------------------------+--------------------------+ 
| Variable_name      | Value          | 
+--------------------------+--------------------------+ 
| character_set_client   | gb2312          | 
| character_set_connection | gb2312          | 
| character_set_database  | utf8           | 
| character_set_filesystem | binary          | 
| character_set_results  | gb2312          | 
| character_set_server   | utf8           | 
| character_set_system   | utf8           | 
| character_sets_dir    | D:\MySQL\share\charsets\ | 
+--------------------------+--------------------------+ 
mysql> use test; 
mysql> select * from messages; 
+----+-------------------+ 
| id | message      | 
+----+-------------------+ 
| 1 | ????MySQL???????? | 
| 2 | ??MySQL??     | 
| 3 | 测试MySQL编码   | 
+----+-------------------+

이제 중국어가 정상적으로 표시되는 것을 볼 수 있습니다(주로 utf8도 중국어도 지원하기 때문에). 명령줄 도구를 사용하여 데이터베이스에 연결할 때 클라이언트 인코딩을 변경하는 것이 가장 좋습니다. GUI를 사용하는 경우에는 필요하지 않습니다. 동시에 클라이언트 인코딩을 수정한 후에도 프로그램은 정상적으로 표시될 수 있습니다(위의 두 가지 사항은 이미 테스트되었습니다)

그래서 프로그램에 중국어를 표시하려면 utf8, gb2312 및 gbk의 세 가지 인코딩을 선택할 수 있습니다. 그러나 중국어 데이터를 추가하거나 명령줄에서 보려면 클라이언트의 인코딩을 gb2312 또는 gbk로 설정해야 합니다. 이는 다시 CMD와 관련이 있습니다. 부호화.

위 내용은 mysql에 삽입된 잘못된 데이터에 대한 Java 솔루션의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.