데이터 정렬의 잘못된 혼합 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 수집 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 문자가 포함될 수 없으므로 비교가 작동해야합니다. 이렇게하면 원래 문자열이 변경됩니다 (ISO 문자 세트에 존재하지 않는 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;
최상위 답변에 수정 사항을 표시 한 후 서버의 기본 설정을 변경하십시오.
" /etc/my.cnf.d/server.cnf "또는 어디에 있든지 [mysqld] 섹션에 기본값을 추가하면 다음과 같습니다.
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
출처 : https://dev.mysql.com/doc/refman/5.7/en/charset-applications.html
Change the character set of the table to utf8
ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8
참고URL : https://stackoverflow.com/questions/1008287/illegal-mix-of-collations-mysql-error
'IT박스' 카테고리의 다른 글
방법이 존재하는지 확인 (0) | 2020.08.03 |
---|---|
SQL-하나의 쿼리에서 여러 레코드 업데이트 (0) | 2020.08.03 |
파이썬에서 목록에서 중복 dict 제거 (0) | 2020.08.03 |
특정 파이썬 버전에 대해 pip를 사용하여 모듈 설치 (0) | 2020.08.03 |
기본적으로 HTML 선택 비활성화 옵션을 표시하는 방법은 무엇입니까? (0) | 2020.08.03 |