2017-10-06 12 views
0

사용자가 영어 단어를 볼 수 있고 모든 언어로 동등한 번역을 입력 할 수있는 화면이 있습니다.utf8로 문자 집합과 데이터 정렬을 변경 한 후에도 중국어, 러시아어 등의 문자를 mysql 테이블에 저장할 수 없습니다.

내 데이터베이스 작성 쿼리

CREATE DATABASE IF NOT EXISTS lang_db 
DEFAULT CHARACTER SET utf8 
DEFAULT COLLATE utf8_general_ci; 

내 테이블 작성 쿼리

CREATE TABLE lang_map (
WORD   VARCHAR(2048) NULL, 
DESCRIPTION  VARCHAR(2048) NULL 
) CHARACTER SET utf8 COLLATE utf8_general_ci; 

내가 자바 읽은 다음에 삽입하는 쿼리를 발생 JSON 단어와 설명을 얻고있다 표. 하지만 중국이나 러시아 같은 언어의 경우 삽입되는 것은 ?입니다.

MySQL 버전 : 5.5 자바 : 1.6

갱신 : 자바 코드 :

컨트롤러 처리 아약스 호출.

@ResponseBody 
public setChanges(@RequestBody JSONObject keyValueMap) throws Exception { 
    return myService.setChanges(keyValueMap); 
} 

서비스 코드

List<LangMapping> langMappings = new ArrayList<LangMapping>(); 
for(Object keyObject : changedKeyValueMap.keySet()){ 
    String key = String.valueOf(keyObject) ; 
    String description = (String) changedKeyValueMap.get(key); 
    langMappings.add(buildLangMapping(key,localeCode,description)); //pojo 
} 
//using above array list i am inserting into database table 
+0

를 참조 할 수 있습니다 등 독일어, 중국어, 러시아어? 나는 또한 자바 코드도 보여줘야한다고 생각한다. – Alex

+0

데이터베이스 테이블에받은 문자열을 직접 삽입하고 있지만 문제가되지 않습니다. 심지어 테이블에 수동 물음표를 삽입하고 악센트 부호가없는 문자를 삽입 할 때도 마찬가지입니다. – ppmakeitcount

+0

_connection_이 "UTF-8"이 아닌 것 같습니다. 자세한 내용은 [_this_] (https://stackoverflow.com/questions/38363566/trouble-with-utf-8-characters-what-i-see-is-not-what-i-stored)의 "물음표"를 참조하십시오. 디버깅. –

답변

0

당신은 에서 응용 프로그램의 모든 단계에 적절한 인코딩을 사용하고 있는지 확인해야합니다. 가장 쉬운 방법은 대개 동일한 인코딩을 인 UTF-8을 사용하는 것입니다. 그들이 제대로 인코딩 된 경우 러시아의 경우 즉 (확인, 메모장 + + 같은 좋은 텍스트 편집기를 사용하여

  1. 당신이 얻을 JSON 파일의 일부를 엽니 다

    문제를 디버깅하려면, 다음 단계를 수행 할 수/중국어/어떤 문자가 올바르게 표시되는지 확인) 편집기가 JSON 파일의 인코딩을 UTF-8로 자동 감지했는지 확인하십시오.

    원본 JSON 데이터를 파일로 가지고 있지 않지만 일부 웹 요청에 대한 응답으로 가져온 경우 wget 또는 curl과 같은 도구를 사용하여 파일로 덤프하여 위에서 설명한 파일을 검사하십시오 .

  2. JSON 입력을 JAVA로 읽은 다음 JAVA 내에서 입력을 덤프 한 후 처리를 더 진행하십시오. JAVA는 모르지만, 프로그래밍 언어/라이브러리/파일 열기 함수에 입력을 인코딩하는 방법을 알려줘야한다는 일반적인 문제가 있습니다.

    그렇게하지 않으면 JAVA가 JSON 입력을 기본 인코딩으로 가정합니다. 이것이 잘못되면, 읽어 들인 데이터가 쓰레기가됩니다.

    마찬가지로, 읽은 내용을 덤프하기 전에 JAVA에 출력을 인코딩하는 방법을 알려주십시오. 콘솔로 덤프하는 경우 콘솔에서 예상 인코딩을 사용하는지 확인하십시오.

    CGI 메커니즘을 사용하는 웹 응용 프로그램의 경우에도 마찬가지입니다 (거의 모든 경우에서 그렇듯이). 이 문맥에서 표준 입력 및 표준 출력은 일반 파일로 간주 될 수 있습니다.

    물론 JAVA의 파일 및 표준 I/O에 대한 기본 인코딩이 UTF-8 인 경우이 단계를 생략 할 수 있습니다.아직 문제가 발견되지 않으면

  3. , 당신이 UTF8 인코딩 된 데이터를 전송하는 데이터베이스 드라이버를 말해 당신은 UTF8 인코딩 된 데이터를 얻을하려는. Java를 사용하지 않기 때문에이 방법을 모르지만 설명서에 설명되어 있다고 확신합니다.

  4. 가 여전히 작동하지 않으면, 연결 및 클라이언트 (자동 3 단계를 실행 한 후 지금까지 드라이버가 그렇게하지 않는) UTF-8을 사용하는 MySQL을 말한다. SET SESSION character_set_x = 'utf8'과 같은 문을 사용하십시오. 여기에서 xclient, results 또는 connection을 나타냅니다. 데이터베이스에 연결 한 후 즉시이 작업을 수행해야합니다 (물론 런타임 또는 정적 구성에 따라 연결시 드라이버가 자동으로 수행하지 않는 한 다시 수행해야합니다). 당신이 그 단계를 수행하면

, 당신은 잘하면 문제를 찾을 수 있습니다. 어떻게 진행되는지 알려주세요.

0

UTF 같은 다른 언어의 모든 문자를 저장하지 않습니다 당신은 자바에서 문자를 읽어 어떻게 Differences between utf8 and latin1

+0

아니요, 부분적으로 잘못되었습니다. MySQL의 utf8은 모든 유럽 문자와 _ 대부분의 아시아 문자를 처리 할 수 ​​있습니다. MySQL의 utf8mb4는 모든 것을 처리하는 UTF-8과 동일합니다. –