MySQL의 잘못된 데이터 정렬 혼합 오류 해결
텍스트 데이터를 비교하거나 조작하는 데이터베이스 작업을 수행할 때 일관성을 보장하는 것이 중요합니다. 문자 조합에서. MySQL에서 "잘못된 데이터 정렬 혼합" 오류 메시지는 일반적으로 작업의 피연산자에 사용된 데이터 정렬 간의 비호환성을 나타냅니다.
제공된 코드에서 문제는 다음 테이블 및 저장 프로시저:
CREATE TABLE users ( ... ) ENGINE = INNODB CHARACTER SET utf8 COLLATE utf8_unicode_ci; CREATE TABLE products ( ... ) ENGINE = INNODB CHARACTER SET utf8 COLLATE utf8_unicode_ci; CREATE TABLE productUsers ( ... ) ENGINE = INNODB CHARACTER SET utf8 COLLATE utf8_unicode_ci; CREATE PROCEDURE updateProductUsers (IN rUsername VARCHAR(24),IN rProductID INT UNSIGNED,IN rPerm VARCHAR(16)) BEGIN UPDATE productUsers INNER JOIN users ON productUsers.userID = users.userID SET productUsers.permission = rPerm WHERE users.username = rUsername AND productUsers.productID = rProductID; END
저장 프로시저의 입력 매개변수와 사용자 테이블의 사용자 이름 열은 기본 데이터 정렬 utf8_general_ci로 선언되고, productUsers 테이블의 권한 열과 rPerm 매개변수는 utf8_unicode_ci 데이터 정렬로 선언됩니다. .
이 문제를 해결하려면 다음과 같은 여러 가지 옵션이 있습니다.
옵션 1: 입력 변수에 COLLATE 추가
COLLATE 절을 입력에 추가 utf8_unicode_ci 데이터 정렬을 명시적으로 지정하기 위한 저장 프로시저 호출의 변수.
$rUsername = 'aname' COLLATE utf8_unicode_ci; $call = "CALL updateProductUsers(@rUsername, @rProductID, @rPerm);";
옵션 2: COLLATE를 WHERE 절에 추가
COLLATE 절을 WHERE 절에 추가 저장 프로시저 정의에서 users.username 열에 대한 utf8_unicode_ci 데이터 정렬을 지정합니다.
CREATE PROCEDURE updateProductUsers( IN rUsername VARCHAR(24), IN rProductID INT UNSIGNED, IN rPerm VARCHAR(16)) BEGIN UPDATE productUsers INNER JOIN users ON productUsers.userID = users.userID SET productUsers.permission = rPerm WHERE users.username = rUsername COLLATE utf8_unicode_ci AND productUsers.productID = rProductID; END
옵션 3: COLLATE를 IN 매개 변수 정의에 추가
MySQL 버전의 경우 5.7 이전 버전에서는 저장 프로시저 자체의 IN 매개 변수 정의에 COLLATE 절을 추가할 수 있습니다.
CREATE PROCEDURE updateProductUsers( IN rUsername VARCHAR(24) COLLATE utf8_unicode_ci, IN rProductID INT UNSIGNED, IN rPerm VARCHAR(16)) BEGIN UPDATE productUsers INNER JOIN users ON productUsers.userID = users.userID SET productUsers.permission = rPerm WHERE users.username = rUsername AND productUsers.productID = rProductID; END
옵션 4: 테이블 필드 변경
utf8_unicode_ci 데이터 정렬을 사용하려면 사용자 테이블의 사용자 이름 열을 사용하세요.
ALTER TABLE users CHARACTER SET utf8 COLLATE utf8_unicode_ci;
일반적으로 utf8_general_ci가 데이터 정렬 속도가 더 빠르지만 더 넓은 범위의 유니코드 문자를 지원하므로 utf8mb4/utf8mb4_unicode_ci를 사용하는 것이 좋습니다.
위 내용은 MySQL의 \'잘못된 데이터 정렬 혼합\' 오류를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!