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


187
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 명령의 효과는 무엇입니까?



나 자신과 정답을 바꾸고 싶을 수도 있고, 많은 사람들이 두 번째 답이 맞다는 데 동의하는 것 같습니다.
Ahi Tuna

답변:


597

기존 열을 포함 하여 테이블의 기본 문자 집합 및 데이터 정렬을 변경하려면 ( 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


4
기본 문자 집합을 변경하면 어떤 의미가 있습니까? 기존 데이터를 업데이트하므로 테이블을 통해 실행하고 업데이트하거나 잠금을 설정해야합니까?
부여

utf8_bin더 낫지 않습니까? 차이 무엇 utf8_binutf8_unicode_ci?
Jasom Dotnet

1
그것은 내가 사용한 예일뿐입니다. 차이점은 utf8_bin대소 문자를 구분하며 utf8_unicode_ci대소 문자를 구분하지 않는다는 것 입니다 . 하나는 반드시 다른 것보다 낫지는 않습니다. 필요에 맞는 것을 사용하십시오.
Nikki Erwin Ramirez

12
@JasomDotnet 이제 utf8mb4_unicode_ci stackoverflow.com/questions/766809/…
baptx

2
추천하지 마십시오 utf8. 그것은 거의 당신이 원하는 것이 아니며, 종종 예기치 않은 혼란을 초래합니다. utf8문자 세트는 UTF-8과 완벽하게 호환되지 않습니다. utf8mb4문자 세트는 UTF-8을 원한다면 당신이 원하는 것입니다.
Rich Remer

34

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

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


8
실제로 MySQL에는 5 단계의 데이터 정렬이 있으며 많은 사람들이 잊어 버린 문자 집합 수준 기본 데이터 정렬 설정이 있습니다.
Devy

6
연결 데이터 정렬도 show variables like "collation%";있으므로 total은 SIX 입니다.
Dzmitry Lazerka

9

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


3

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

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

(mariaDB 10)


<database name>대신<table name>
dnivog

1
당신은 권장하지해야하는 이유를 허용 대답에 내 의견을 참조 utf8하지만 utf8mb4.
Rich Remer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.