데이터 정렬과 문자 집합의 차이점은 무엇입니까?


24

데이터베이스에 대한 일반적인 질문이 있습니다. 일반적으로 데이터베이스와의 데이터 정렬이라는 용어를 사용합니다. 문자 세트와 어떻게 다른지 알고 싶습니다. 데이터 정렬이 문자 집합의 하위 집합 인 것 같습니다. 그것이 사실이라면, 문자 집합에서 목적 다중 데이터 정렬은 무엇입니까?


답변:


27

문자 집합 은 기호 목록입니다. 당신이 비교하는 경우 ASCII를 에 라틴어 와 라틴 당신이 때문에 모든 미국 단어를 쓸 수 있습니다 라틴 모든 포함 ASCII의 모든 영어 단어를 쓰기에 충분하다 문자를. 반대로 ASCII 를 사용하면 예를 들어 'À', 'ë', 'õ', 'Ñ'과 같은 문자가 없기 때문에 서유럽 특정 언어의 모든 단어를 쓸 수 없습니다.

데이터 정렬 은 문자 간의 비교에 관한 것입니다. 문자 세트의 문자를 비교하는 규칙 세트를 정의합니다.

MySQL에서 데이터 정렬은 종종 한 언어 (예 : 'latin1_swedish_ci', 'latin1_german1_ci'등)와 관련이 있습니다. 선택 쿼리를 주문하면 'ö'로 시작하는 단어가 'o'와 'p'로 시작하는 두 단어 사이에 일부 언어 (일부 데이터 정렬)가 표시됩니다. 그러나 다른 데이터 정렬을 사용하면이 문자가 완전히 끝에 배치되어 결과 선택이 달라집니다.


고마워요, 지금 거의 분명합니다. 다국어 사이트를 계획 할 때 데이터 정렬을 선택하는 것이 심각한 문제라고 생각합니까? 예를 들어 데이터 정렬이 'latin1_swedish_ci'인 경우 유니 코드 언어를 처리하는 동안 예상되는 결과를 얻지 못할 것입니다.
— Shameer

1
유니 코드를 사용하거나 언젠가는 문제가 발생할 수 있습니다 (예 : 아시아 언어). 데이터 정렬은 사용자의 언어에 따라 다릅니다. 다국어 도구를 사용하려면주의해야 할 사항입니다.
— deadalnix

6

이전 답변과 같이 문자 집합은 숫자에 지정된 문자 (문자, 숫자, 표의 문자 등)입니다. 그것들을 볼 수 있으려면 폰트 (작은 "사진")가 있어야합니다. 각 X에 대해 동일한 숫자 (바이트)가 다른 문자를 나타낼 수 있기 때문에 LatinX를 사용하는 것이 중요했습니다.

요즘에는 인코딩을 선택하는 것이 더 중요합니다. 표준은 UTF-8, 유니 코드의 가장 성공적인 표현 (ASCII와 호환 가능하지만 모든 언어, 중국어 및 일본어를 포함하여 유연함) 및 W3C 표준입니다. 즉, 모든 문자 세트를 포함합니다.

데이터 정렬 : 라틴어에서 파생 된 구식 단어입니다. 의미 : 사본 (원고)을 원본과 비교하여 차이점 (오류 또는 변경)을 찾으십시오. 과거에는 매우 유용했지만 이제는 문서와 책이 컴퓨터를 사용하여 작성되고 사본이 항상 원본과 동일하기 때문에 거의 구식입니다. 예 : 이탈리아어 (라틴어에서 파생)에는 동사 "collazionare"가 있지만 사전에 있으며 아무도 사용하지 않습니다.

따라서 데이터 정렬은 비교 연산자의 동작을 정의합니다. =,>, <, <=,> = ...

물론이 연산자는 두 문자열이 같은지 또는 한 단어가 다른 문자열보다 "큰"지를 결정하는 데 사용되며, 정렬하려는 경우 매우 중요합니다. 문자는 모든 언어에 대해 동일한 순서를 갖지 않으므로 한 단어는 데이터 정렬을 사용하는 다른 단어보다 클 수 있지만 다른 언어를 사용하는 것은 아닙니다. 실제 예는 [1]을 참조하십시오.

  • "bin"데이터 정렬이 가장 엄격합니다. SELECT "b"= "B"=> FALSE

  • "ci"데이터 정렬은 대소 문자를 구분하지 않습니다. SELECT "b"= "B"=> TRUE

  • "일반"은 몇 가지 차이점을 무시하는 경향이 있습니다. SELECT "a"= "à"=> TRUE

  • 다른 언어는 하나 이상의 언어에 따라 다릅니다. "스웨덴어"예 (스웨덴이 종종 기본 설정 인 이유를 모르겠습니다)

나는 여전히 모든 데이터 정렬의 동작이 자세하게 설명되어있는 웹 사이트를 찾고 있습니다. 이러한 예제는 내 경험 때문입니다.

[1] http://www.olcot.co.uk/sql-blogs/revised-difference-between-collation-sql_latin1_general_cp1_ci_as-and-latin1_general_ci_as


1
일부 MySQL에서는 여전히 스웨덴어가 기본값입니다. 스웨덴의 작은 팀이 MySQL을 만들었을 때의 유산은 95
— Chris Wood
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.