2013-02-06 5 views
1

나는 mysql dbms를 사용하여 위키피디아의 페이지를 저장하고 있습니다. 나는 지시문의 my.cnf 파일에 utf-8 (위키 백과 인코딩)에 문자 집합 인코딩을 설정 한 :MySQL은 일부 UTF8 문자를 올바르게 저장하지 않습니다.

[mysqld] 
character_set_server = utf8 

그리고 'chararacter set utf8' 속성 정의 내 데이터베이스를 만들었습니다. 내 JDBC 드라이버를 초기화 할 때 'charSet=utf8' 속성을 삽입

  • :

    은 또한으로 mysqld를 클라이언트의 문자 세트 인코딩을 변경했습니다. 쿼리를 수행

'set names utf8'에 나는 MySQL 서버가 다른 사람들과 일부 문자를 대체하는 것으로 나타났습니다하지만.

예를 들어 áa으로 바꿉니다.

UPDATE는

나는 character_set_clientcharacter_set_set 모두 utf8을하도록 보장 명령 show variables like '%char%'을 실행했습니다.

데이터베이스에 올바른 문자를 저장하려면 어떻게해야합니까? 감사! 내 대답에 대한

url="jdbc:mysql://localhost:port/DBNAME?characterEncoding=UTF-8" 

여기에 몇 가지 추가 정보입니다 :

+0

[1] 어떤 드라이버를 사용하고 있습니까? [2] 데이터베이스에 저장할 매개 변수를 설정하기 전에'new String ([String Object] .getBytes(), "UTF-8")을 사용하고 있습니까? –

+0

[1] MySQL Connector/J를 사용하고 있습니다. [2] 새로운 String ([String Object] .getBytes(), Charset.forName ("UTF-8"))'을 시도했지만 작동하지 않습니다. – user278064

+1

MySQL Workbench 또는 유사한 도구에서 UTF-8 텍스트를 삽입 할 수 있습니까? 그렇다면 Eran이 지적했듯이 연결 URL 설정과 관련이있을 수 있습니다. – melihcelik

답변

2

시도는 DB의 URL의 인코딩을 지정합니다

다음은 MySQL의 문서 (http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-charsets.html)에서 가져옵니다 다음

JDBC 드라이버에서 서버로 보낸 모든 문자열은 기본 Java 유니 코드 형식에서 클라이언트 문자로 자동으로 변환됩니다 ( ). (0), Statement.executeUpdate(), Statement.executeQuery() 및 모든 setBytes(), setBinaryStream()을 사용하여 매개 변수를 제외하고 을 제외하고 PreparedStatement 및 CallableStatement 매개 변수를 사용하여 보낸 모든 쿼리를 포함하여인코딩입니다. , setAsciiStream(), setUnicodeStream() 및 setBlob()입니다. 클라이언트와 서버 사이
문자 인코딩 문자 인코딩 설정

자동 연결시 검출된다. 버전 4.1.0 이상 서버의 경우 character_set_server를 사용하여 서버에 인코딩을 지정합니다. 드라이버는 서버가 지정한 인코딩 을 자동으로 사용합니다. 클라이언트 측에서 자동으로 검색된 인코딩을 무시하려면 서버에 연결하는 데 사용 된 URL의 characterEncoding 속성을 사용합니다.클라이언트에서 복수 문자 세트 을 전송하려면 utf8을 기본 서버 문자 집합으로 구성하거나 문자 입력 코드 을 통해 UTF-8을 사용하도록 JDBC 드라이버를 구성하여 UTF-8 인코딩을 사용하십시오.

몇 달 전에 비슷한 문제가 발생했습니다. 나는 (mysqld --verbose -help 명령을 사용하여) MySQL에서 character_set_server의 기본값을 확인했다. latin1입니다.

관련 문제