[mysql] 데이터 정렬의 잘못된 조합 MySQL 오류
많은 데이터를 처리하는 동안이 이상한 오류가 발생합니다.
Error Number: 1267
Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='
SELECT COUNT(*) as num from keywords WHERE campaignId='12' AND LCASE(keyword)='hello again 昔 ã‹ã‚‰ ã‚ã‚‹ å ´æ‰€'
이 문제를 해결하려면 어떻게해야합니까? 이 오류가 발생하지 않도록 어떻게 든 문자열을 이스케이프 할 수 있습니까? 아니면 어떻게 든 테이블 인코딩을 변경해야합니까? 그렇다면 어떻게 변경해야합니까?
답변
SET collation_connection = 'utf8_general_ci';
그런 다음 데이터베이스
ALTER DATABASE your_database_name CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
MySQL은 때때로 합리적인 이유없이 스웨덴어를 몰래 넣습니다.
답변
테이블 인코딩과 연결 인코딩을 모두 다음과 같이 설정해야합니다 UTF-8
.
ALTER TABLE keywords CHARACTER SET UTF8; -- run once
과
SET NAMES 'UTF8';
SET CHARACTER SET 'UTF8';
답변
CONVERT(column1 USING utf8)
내 문제를 해결합니다. 여기서 column1은이 오류를 제공하는 열입니다.
답변
오류에 대해 다음 문을 사용하십시오.
데이터가 테이블에 있으면 데이터 백업에주의하십시오.
ALTER TABLE your_table_name 문자 집합으로 변환 utf8 COLLATE utf8_general_ci;
답변
일반적으로 가장 좋은 방법은 테이블 데이터 정렬을 변경하는 것입니다. 그러나 나는 오래된 응용 프로그램을 가지고 있으며 이것이 부작용이 있는지 여부를 실제로 예측할 수 없습니다. 따라서 어떻게 든 문자열을 데이터 정렬 문제를 해결하는 다른 형식으로 변환하려고 시도했습니다. 내가 찾은 것은 문자열을 문자의 16 진수 표현으로 변환하여 문자열 비교를 수행하는 것입니다. 데이터베이스에서 이것은 HEX(column).
PHP의 경우 다음 기능을 사용할 수 있습니다.
public static function strToHex($string)
{
$hex = '';
for ($i=0; $i<strlen($string); $i++){
$ord = ord($string[$i]);
$hexCode = dechex($ord);
$hex .= substr('0'.$hexCode, -2);
}
return strToUpper($hex);
}
데이터베이스 쿼리를 수행 할 때 원래 UTF8 문자열을 utf8_decode()
DB에서 사용하기 전에 먼저 iso 문자열 (예 : PHP에서 사용)로 변환해야합니다 . 데이터 정렬 유형으로 인해 데이터베이스 내부에 UTF8 문자가있을 수 없으므로 원래 문자열이 변경 되더라도 비교가 작동해야합니다 (존재하지 않는 UTF8 문자 변환은?로 끝나거나 완전히 제거됨). 데이터베이스에 데이터를 쓸 때 동일한 UTF8에서 ISO로 변환을 사용하는지 확인하십시오.
답변
원래 CHARSET = latin1으로 만든 테이블이 있습니다. 테이블을 utf8로 변환 한 후 일부 열이 변환되지 않았지만 실제로는 명확하지 않았습니다. 실행을 시도하고 SHOW CREATE TABLE my_table;
어떤 열이 변환되지 않았는지 확인하거나 아래 쿼리를 사용하여 문제가있는 열에서 잘못된 문자 집합을 수정할 수 있습니다 (필요에 따라 varchar 길이와 CHARSET 및 COLLATE 변경).
ALTER TABLE `my_table` CHANGE `my_column` `my_column` VARCHAR(10) CHARSET utf8
COLLATE utf8_general_ci NULL;
답변
테이블의 문자 세트를 utf8로 변경하십시오.
ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8
