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)