[mysql] 테이블의 기본 데이터 정렬을 변경하는 방법은 무엇입니까?

create table check2(f1 varchar(20),f2 varchar(20));

기본 데이터 정렬을 사용하여 테이블을 만듭니다 latin1_general_ci.

alter table check2 collate latin1_general_cs;
show full columns from check2;

열의 개별 데이터 정렬을 ‘latin1_general_ci’로 표시합니다.

그러면 alter table 명령의 효과는 무엇입니까?



답변

기존 열을 포함 하여 테이블의 기본 문자 집합 및 데이터 정렬을 변경하려면 ( convert to 절 참조) :

alter table <some_table> convert to character set utf8mb4 collate utf8mb4_unicode_ci;

몇 가지 의견을 묻는 메시지 덕분에 답변을 편집했습니다.

utf8을 권장하지 않아야합니다. 그것은 거의 당신이 원하는 것이 아니며, 종종 예기치 않은 혼란을 초래합니다. utf8 문자 세트는 UTF-8과 완전히 호환되지 않습니다. UTF-8을 원한다면 utf8mb4 문자 세트가 필요합니다. – Rich Remer 3 월 28 일 18시 23:41

그것은 매우 중요해 보입니다. 댓글을 읽고 @RichRemer 감사합니다. Nikki, 나는 이것이 얼마나 많은 조회를 얻는지를 고려하여 답변에서 편집해야한다고 생각합니다. https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8.html을 참조하십시오. 그리고 MySQL에서 utf8mb4와 utf8 문자 집합의 차이점은 무엇입니까? – Paulpro 3 월 12 일 17:46


답변

MySQL에는 서버, 데이터베이스, 테이블, 열의 4 가지 수준의 데이터 정렬이 있습니다. 서버, 데이터베이스 또는 테이블의 데이터 정렬을 변경하면 각 열의 설정은 변경되지 않지만 기본 데이터 정렬은 변경됩니다.

예를 들어 데이터베이스의 기본 데이터 정렬을 변경하면 해당 데이터베이스에서 생성 한 각 새 테이블이 해당 데이터 정렬을 사용하고 테이블의 기본 데이터 정렬을 변경하면 해당 테이블에서 생성 한 각 열에 해당 데이터 정렬이 적용됩니다.


답변

테이블의 기본 데이터 정렬을 설정합니다. 새 열을 만들면 latin_general_ci와 대조되어야합니다. 개별 열의 데이터 정렬을 지정하고 작동하는지 확인하십시오. MySQL은 이것을 처리하는 방식과 관련하여 실제로 기괴한 행동을합니다.


답변

SCHEMA뿐만 아니라 테이블을 변경해야 할 수도 있습니다.

ALTER SCHEMA `<database name>`  DEFAULT CHARACTER SET utf8mb4  DEFAULT COLLATE utf8mb4_unicode_ci (as Rich said - utf8mb4);

(mariaDB 10)


답변