2016-09-22 3 views
1

문자 인코딩이 latin1 (1 바이트 문자 집합) 일 때 SQL 문 미만은 오류없이 실행됩니다.MySQL에서 char 데이터 유형의 최대 길이가 잘못되었습니다.

create table chartype (chardata char(255)); 

그러나 문자 인코딩이 문이 오류가 발생한다

create table chartype (chardata char(255)); 

UTF-8 (각 문자에 대한 3 바이트)이지만,이 오류없이 실행됩니다. 문자 데이터 형식에 대한 최대 길이

create table chartype (chardata char(85)); 

85 * 3 = 255bytes 때문에 85UTF-8 문자

세트에 대한 최대 길이에만 문 아래로 허용한다 인코딩 UTF-8 들면 255 bytes 인 제발 분명히 해주세요.

+2

문서에서는 char 길이가 바이트 길이가 아니라 255로 제한됩니다. – Uueerdo

+0

잘 작동하고, w3school에서 테스트 했으므로 [w3Sql] (http://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all)을 사용해 볼 수도 있습니다. –

답변

1

CHAR(255)이라고 말하면 255자를 수용 할 수있는 고정 길이 필드를 만듭니다. 이것은 바이트와 구별됩니다. UTF-8 문자는 말하는 문자에 따라 길이가 1에서 4 바이트까지 다양하지만 MySQL의 기본값은 길이가 3 바이트 인 문자 만 사용할 수 있습니다.

유니 코드 문자의 전체 범위를 처리하려면 utf8mb4 인코딩을 사용해야합니다.

CHARCHAR이 고정 길이이며 많은 낭비되는 공간을 만들기 때문에 CHAR보다 VARCHAR을 사용해야합니다.

0

http://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html 부분적으로 말한다 : 멀티 바이트 문자를 저장하는 VARCHAR C 럼의

는, 문자의 유효 최대 수는 적습니다. 예를 들어, utf8mb3 문자는 문자 당 최대 3 바이트를 요구할 수 있으므로 utf8mb3 문자 세트를 사용하는 VARCHAR 열은 최대 21,844 자로 선언 될 수 있습니다.

CHAR 또는 TEXT 또는 문자 집합을 지원하는 다른 모든 데이터 형식에도 동일하게 적용됩니다.

관련 문제