2011-12-13 12 views
2

MySQL에서 char 필드를 정렬하는 데 어려움을 겪고 있습니다. 문제는 강조된 문자가 강조되지 않은 문자와 섞여 있다는 것입니다. 예 :MySQL 정렬 순서 - 데이터 정렬?

Abc 
Ábd 
Acc 

데이터 정렬과 관련이 있다고 생각했습니다. 그래서 this post을 읽은 후 테이블의 데이터 정렬을 utf8-ut8_bin으로 변경했습니다. 실제로 여러 번 테이블을 여러 번 조합하여 변경했습니다. 시가가 없습니다.

또한 정렬을 혼합 목록으로 만들지 않는 한 정렬 순서를 신경 써야합니다.

Ábd 
Abc 
Acc 

등이있다 : 즉,이 괜찮

Abc 
Acc 
Ábd 

응답을 기대하겠습니다.

+0

에 "나에 미치는 영향"을 클릭 제안 그리고 어떻게 당신이 그들을 정렬 하시겠습니까? 어떤 대조에 따르면? – newtover

+0

죄송합니다. 원래 게시물을 편집하여 원하는 동작을 설명했습니다. – hba

답변

1

예를 들어 utf8_general_cs과 같이 대/소문자 구분 데이터 정렬을 사용해야합니다.

UPD

미안은 it seems는 더 utf8_general_cs, utf8_bin 그래도 작동하지합니다있다.

그리고 테이블의 특정 필드 대신 데이터 정렬을 변경해야합니다 (또는 필드가 테이블 기본값을 사용하는지 확인해야합니다).

mysql> SELECT * FROM (
    -> SELECT 'A' as l 
    -> UNION ALL 
    -> SELECT 'á' as l 
    -> UNION ALL 
    -> SELECT 'A' as l) ls 
    -> ORDER BY l; 
+----+ 
| l | 
+----+ 
| A | 
| á | 
| A | 
+----+ 
3 rows in set (0.00 sec) 

mysql> SELECT * FROM (
    -> SELECT 'A' as l 
    -> UNION ALL 
    -> SELECT 'á' as l 
    -> UNION ALL 
    -> SELECT 'A' as l) ls 
    -> ORDER BY l COLLATE utf8_bin; 
+----+ 
| l | 
+----+ 
| A | 
| A | 
| á | 
+----+ 
3 rows in set (0.00 sec) 
+0

자세한 답변을 보내 주셔서 감사합니다. utf8_bin과 데이터 정렬을 위해 스키마와 테이블을 변경했지만 여전히 작동하지 않습니다. 그런 다음 쿼리를 실행하여 오류가 발생했습니다. 칼럼을 보았을 때 칼럼은 기본 콜레 션을 가졌습니다. utf8_bin 열을 변경 한 다음 작동했습니다. 다시 한번 감사드립니다. – hba

+0

이 접근법은 _equality_를 설명하지 못합니다. –

0

@newtower는 좋은 출발점을 맞이하였으나, 나 '커뮤니티'어느 쪽이 결정적 이었다는 것을 깨달았다.

unicode_ci (그리고 거의 모든 다른 데이터 정렬) :

SET NAMES utf8 COLLATE utf8_unicode_ci; 

SELECT GROUP_CONCAT(l SEPARATOR '=') AS gc 
    FROM (
    SELECT 'A' as l UNION ALL 
    SELECT 'á' as l UNION ALL 
    SELECT 'A' as l    ) ls 
    GROUP BY l 
    ORDER BY gc; 

+--------+ 
| gc  | 
+--------+ 
| A=á=A | 
+--------+ 

빈은 :

SET NAMES utf8 COLLATE utf8_bin; 

SELECT GROUP_CONCAT(l SEPARATOR '=') AS gc 
    FROM (
    SELECT 'A' as l UNION ALL 
    SELECT 'á' as l UNION ALL 
    SELECT 'A' as l    ) ls 
    GROUP BY l 
    ORDER BY gc; 

+------+ 
| gc | 
+------+ 
| A=A | 
| á | 
+------+ 

(당신은에 DISTINCT를 추가 할 수 그래서 '수정'그것을해야 답을 제공하고있다 GROUP_CONCATA을 피하십시오.

그리고 utf8 데이터 정렬의 전체 과정은 다음과 같습니다 ().

당신이 https://bugs.mysql.com/bug.php?id=58797