문제:
MySQL 데이터베이스에서 고유 필드는 다음을 보장해야 합니다. 두 행의 값이 동일하지 않습니다. 그러나 후행 공백이 있는 데이터를 고유 필드에 삽입하면 공백이 무시되므로 중복 값이 저장될 수 있습니다. 이는 사용자 입력에서 선행 및 후행 공백을 보존해야 할 때 문제를 야기합니다.
해결책:
기본적인 문제는 MySQL이 문자열 비교에서 후행 공백을 처리하는 데서 비롯됩니다. . 모든 MySQL 데이터 정렬은 PADSPACE 유형입니다. 즉, CHAR 및 VARCHAR 필드 유형 모두에서 후행 공백이 무시됩니다. 이 동작은 일관된 문자열 비교를 보장하기 위한 것이지만 후행 공백을 보존해야 하는 필요성과 충돌합니다.
이 문제를 해결하려면 두 가지 주요 해결 방법이 있습니다.
1. 데이터를 VARBINARY로 저장:
CHAR 또는 VARCHAR와 같은 텍스트 기반 데이터 유형을 사용하는 대신 데이터를 VARBINARY로 저장하는 것이 좋습니다. VARBINARY는 후행 공백을 포함한 모든 문자를 보존하면서 데이터를 바이트 시퀀스로 저장합니다. 이렇게 하면 고유 필드가 공백을 포함한 정확한 값을 기반으로 실제로 고유성을 적용할 수 있습니다.
예:
<code class="sql">CREATE TABLE test_ws ( `value` VARBINARY(255) UNIQUE );</code>
2. NO PAD 데이터 정렬 사용(MySQL 8.0 이상):
MySQL 버전 8.0 이상에서는 NO PAD 데이터 정렬을 도입했습니다. 이러한 데이터 정렬은 문자열 비교 중에 후행 공백을 포함하여 패딩 문자를 무시합니다. NO PAD 데이터 정렬을 사용하면 후행 공백을 포함하여 정확한 값을 기준으로 고유성을 적용할 수 있습니다.
예:
<code class="sql">CREATE TABLE test_ws ( `value` VARCHAR(255) UNIQUE COLLATE utf8mb4_0900_ai_ci );</code>
참고: NO PAD 조합 필드를 기준으로 데이터를 정렬하면 인식된 문자 시퀀스가 아닌 바이트 값을 기준으로 정렬이 발생하므로 예상치 못한 결과가 발생할 수 있습니다.
위 내용은 MySQL은 고유 필드의 후행 공백을 어떻게 처리하며 해결 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!