[SQL] 정렬 MySQL의 오류의 불법 혼합
SQL정렬 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 昔 ã‹ã‚‰ ã‚ã‚‹ å ´æ‰€'
나는이 문제를 해결하기 위해 무엇을 할 수 있습니까? 어떻게 든 문자열을 탈출 할 수 있도록이 오류가 발생하지 않습니다, 또는 내 표는 어떻게 든 인코딩 변경해야하고, 만약 그렇다면, 내가 그것은 변경해야합니까?
해결법
-
==============================
1.
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은 어떤 합리적인 이유 때로는 거기에 스웨덴어 몰래.
-
==============================
2.당신은 당신의 테이블 인코딩 및 UTF-8로 연결 인코딩을 모두 설정해야합니다 :
당신은 당신의 테이블 인코딩 및 UTF-8로 연결 인코딩을 모두 설정해야합니다 :
ALTER TABLE keywords CHARACTER SET UTF8; -- run once
과
SET NAMES 'UTF8'; SET CHARACTER SET 'UTF8';
-
==============================
3.
CONVERT(column1 USING utf8)
내 문제를 해결합니다. 어디, 컬럼 날이 오류를 제공하는 열입니다.
-
==============================
4.오류 다음 문을 사용하여
오류 다음 문을 사용하여
데이터가 테이블에있는 경우 데이터 걸릴 백업에 대한주의하십시오.
ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
-
==============================
5.일반적으로 가장 좋은 방법은 테이블 데이터 정렬을 변경하는 것입니다. 그러나 나는 이전 응용 프로그램이 정말이 부작용이 있는지 여부 결과를 예상 할 수 없습니다. 그러므로 나는 데이터 정렬 문제를 해결 다른 형식으로 문자열을 변환하기 위해 어떻게 든 노력했다. 내가 작업을 발견하는 것은 그것의 문자의 16 진수 표현으로 문자열을 변환하여 비교 문자열을하는 것입니다. 데이터베이스에이 HEX (열)로 이루어집니다. PHP를 들어이 기능을 사용할 수 있습니다 :
일반적으로 가장 좋은 방법은 테이블 데이터 정렬을 변경하는 것입니다. 그러나 나는 이전 응용 프로그램이 정말이 부작용이 있는지 여부 결과를 예상 할 수 없습니다. 그러므로 나는 데이터 정렬 문제를 해결 다른 형식으로 문자열을 변환하기 위해 어떻게 든 노력했다. 내가 작업을 발견하는 것은 그것의 문자의 16 진수 표현으로 문자열을 변환하여 비교 문자열을하는 것입니다. 데이터베이스에이 HEX (열)로 이루어집니다. 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 문자열이있는 ISO 문자열로 먼저 변환해야 DB에서 사용하기 전에 (예를 들어, PHP에서 utf8_decode ()를 사용하여). 때문에 정렬 유형의 데이터베이스는이 원래 문자열 (A의 ISO 캐릭터 세트 결과에 existend하지? 또는이 완전히 제거 변환 UTF8 문자를) 변경 불구하고 comparism 이벤트를 작동해야하므로 내부 UTF8 문자를 가질 수 없습니다. 그냥 확인 당신이 ISO 변환 같은 UTF8을 사용하는 데이터베이스에 데이터를 쓸 때.
-
==============================
6.내 표는 원래 CHARSET = 라틴어로 생성했다. UTF8로 테이블 변환 후 일부 열은 정말 분명 아니었다 그러나, 변환되지 않았다. 당신은 SHOW는 my_table 테이블을 만들 실행하려고 할 수 있습니다; 및 변환되지 않은 열을 참조하거나 아래의 쿼리에 문제가 열에 잘못된 문자 집합을 수정 (변경 VARCHAR 길이와 문자 집합 및 COLLATE 필요에 따라) :
내 표는 원래 CHARSET = 라틴어로 생성했다. UTF8로 테이블 변환 후 일부 열은 정말 분명 아니었다 그러나, 변환되지 않았다. 당신은 SHOW는 my_table 테이블을 만들 실행하려고 할 수 있습니다; 및 변환되지 않은 열을 참조하거나 아래의 쿼리에 문제가 열에 잘못된 문자 집합을 수정 (변경 VARCHAR 길이와 문자 집합 및 COLLATE 필요에 따라) :
ALTER TABLE `my_table` CHANGE `my_column` `my_column` VARCHAR(10) CHARSET utf8 COLLATE utf8_general_ci NULL;
-
==============================
7.상단의 대답에 나열된 수정을 한 후, 서버의 기본 설정을 변경합니다.
상단의 대답에 나열된 수정을 한 후, 서버의 기본 설정을 변경합니다.
당신의 "/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
-
==============================
8.UTF8로 테이블의 문자 집합을 변경
UTF8로 테이블의 문자 집합을 변경
-
==============================
9.그 사용 캐스트 () 나를 위해 최고의 솔루션이었다 발견 :
그 사용 캐스트 () 나를 위해 최고의 솔루션이었다 발견 :
cast(Format(amount, "Standard") AS CHAR CHARACTER SET utf8) AS Amount
개종자 () 함수도 있습니다. 여기에 대한 자세한 내용
여기에 또 다른 자원
from https://stackoverflow.com/questions/1008287/illegal-mix-of-collations-mysql-error by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 SQL Server 데이터의 스크립트를 얻으려면? [복제] (0) | 2020.03.26 |
---|---|
[SQL] 변환 대 T-SQL 캐스트 (0) | 2020.03.26 |
[SQL] 오류 1046 없음 데이터베이스 선정, 어떻게 해결합니까? (0) | 2020.03.26 |
[SQL] DISTINCT와 선택 COUNT (*) - SQL 서버 쿼리 (0) | 2020.03.26 |
[SQL] 인라인 테이블 값 함수 대 다중 문 테이블 반환 함수 (0) | 2020.03.26 |