반응형
이중 인코딩 UTF8 문자 수정 방법(utf-8 테이블)
전회LOAD DATA INFILECSV 파일이 다음과 같은 전제 하에 실행되었습니다.latin1- - - 。이 Import에서는 멀티바이트 문자는 2개의 단일 문자로 해석되어 utf-8(다시)을 사용하여 부호화되었습니다.
이 이중 인코딩으로 인해 다음과 같은 이상 징후가 생성되었습니다.ñ대신ñ.
이 끈들은 어떻게 고쳐야 하죠?
다음 MySQL 함수는 이중 인코딩 후 올바른 utf8 문자열을 반환합니다.
CONVERT(CAST(CONVERT(field USING latin1) AS BINARY) USING utf8)
사용 가능한 것은, 다음과 같이 사용할 수 있습니다.UPDATE다음 명령어를 사용하여 필드를 수정합니다.
UPDATE tablename SET
field = CONVERT(CAST(CONVERT(field USING latin1) AS BINARY) USING utf8);
위의 답변은 일부 데이터에 적용되었지만 실행 후 많은 NULL 열이 생성되었습니다.변환에 실패하면 무효가 반환된다고 생각합니다.그것을 피하기 위해 나는 소액 수표를 추가했다.
UPDATE
tbl
SET
col =
CASE
WHEN CONVERT(CAST(CONVERT(col USING latin1) AS BINARY) USING utf8) IS NULL THEN col
ELSE CONVERT(CAST(CONVERT(col USING latin1) AS BINARY) USING utf8)
END
mysql은 인식되지 않는 문자 뒤에 있는 모든 데이터를 삭제하기 때문에 "utf8" 대신 "utf8mb4"를 사용하는 것이 매우 중요합니다.그래서 더 안전한 방법은,
UPDATE tablename SET
field = CONVERT(CAST(CONVERT(field USING latin1) AS BINARY) USING utf8mb4);
조심해요.
저도 이 문제에 직면해 있습니다.여기서 Oracle을 위한 솔루션을 소개합니다.
update tablename t set t.colname = convert(t.colname, 'WE8ISO8859P1', 'UTF8') where t.colname like '%Ã%'
Java용 또 다른 기능:
public static String fixDoubleEncoded(String text) {
final Pattern pattern = Pattern.compile("^.*Ã[^0-9a-zA-Z\\ \t].*$");
try {
while (pattern.matcher(text).matches())
text = new String(text.getBytes("iso-8859-1"), "utf-8");
}
catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return text;
}
언급URL : https://stackoverflow.com/questions/11436594/how-to-fix-double-encoded-utf8-characters-in-an-utf-8-table
반응형
'source' 카테고리의 다른 글
| 날짜/시간 열에 기반한 마지막 N일 데이터 선택 (0) | 2023.01.09 |
|---|---|
| MySQL에서 마리아DB의 순서가 잘못되었지만 수정되었습니다. (0) | 2023.01.09 |
| MariaDB Galera 클러스터를 생성할 수 없습니다. (0) | 2023.01.09 |
| ERROR 1064 (42000) (교과서 코드에서도) (0) | 2023.01.09 |
| jQuery에서 Ajax-requests와 함께 FormData 개체를 전송하려면 어떻게 해야 합니까? (0) | 2023.01.09 |