MySQL VARCHAR 길이 및 UTF-8
MySQL VARCHAR(32)
에서 UTF-8 테이블에 새 필드를 만들면 해당 필드에 32 바이트의 데이터를 표시 할 수 있는지 아니면 32 개의 데이터를 사용할 수 있는지 여부
이 답변은 내 Google 검색 결과 상단에 표시됩니다.
혼란은 아마도 테스트중인 다른 버전의 mysql 때문일 것입니다.
- 버전 4는 바이트를 계산합니다.
- 버전 5는 문자를 계산합니다.
http://dev.mysql.com/doc/refman/5.0/en/string-type-overview.html
MySQL은 문자 단위로 문자 열 정의의 길이 사양을 해석합니다. (MySQL 4.1 이전에는 열 길이가 바이트로 해석됩니다.) 이것은 CHAR, VARCHAR 및 TEXT 유형에 적용됩니다.
흥미롭게도 (나는 그렇게 생각하지 않는다) varchar 열의 최대 길이는 다음과 같이 utf8의 영향을받습니다.
MySQL 5.0.3 이상에서 VARCHAR의 유효 최대 길이는 최대 행 크기 (65,535 바이트, 모든 열에서 공유 됨) 및 사용 된 문자 집합의 영향을받습니다. 예를 들어 utf8 문자는 문자 당 최대 3 바이트를 요구할 수 있으므로 utf8 문자 집합을 사용하는 VARCHAR 열은 최대 21,844 자로 선언 할 수 있습니다.
32 개의 멀티 문자를 사용할 수 있습니다.
UTF-8로 공간을 절약하기 위해 CHAR 대신 VARCHAR을 사용하십시오. CHARACTER SET utf8 열의 각 문자에 대해 3 개의 바이트를 예약해야합니다. 예를 들어 MySQL은 CHAR (10) CHARACTER SET utf8 열에 대해 30 바이트를 예약해야합니다.
http://dev.mysql.com/doc/refman/5.0/en/charset-unicode.html
collation과 함께 32 멀티 바이트 데이터 , 방금 XAMPP로 테스트했습니다.varchar(32)
utf8_unicode_ci
1234567890123456789012345678901234567890
다음으로 잘립니다.
12345678901234567890123456789012
구경 일반 ASCII 문자가 아님을 명심하십시오.
행의 총 데이터 길이가 고정되고 빠르기 때문에 자주 업데이트되는 테이블에는 "char"를 사용하는 것이 좋습니다. Varchar 열은 행 데이터 크기를 동적으로 만듭니다. 그것은 MyISAM은 좋지 않지만 InnoDB와 다른 사람들은 좋다. 예를 들어, 매우 좁은 "유형"열이있는 경우 최소 공간 만 요구 라틴 1 문자 집합과 함께 char (2)를 사용하는 것이 좋습니다.
latin1 인코딩 (예 : PHP 사용)을 사용하여 데이터베이스에 연결하여 MySQL UTF8 열에 PHP UTF8을 사용하여 이중 저장하면 UTF8 인코딩이됩니다.
UTF8 확장의 $s
길이가 32 자이지만 길이가 64 바이트이고 열이 VARCHAR(32)
UTF8 인 경우 이중 인코딩 자은 숭배을 $s
64 길이의 UTF8 확장 로 변환 하여 데이터베이스에서 잘리는 첫 번째 32 바이트에 해당하는 32 공유로 변환합니다. / $s
. MySQL 5가 MySQL 4처럼 동작 아이디어 생각할 수도 있습니다. 실제로 효과의 두 번째 원인입니다.
참고 URL : https://stackoverflow.com/questions/1997540/mysql-varchar-lengths-and-utf-8
'ProgramingTip' 카테고리의 다른 글
Scaffold를 포함하지 않는 것이로 호출 된 Scaffold.of () (0) | 2020.10.18 |
---|---|
Java의 형식 암호화에서 $ 이해 (0) | 2020.10.18 |
테스트 파일을 JUnit으로 가져 오는 쉬운 방법 (0) | 2020.10.18 |
Spring MVC에서 @ResponseBody를 사용할 때 MIME 유형 헤더를 사용하는 방법? (0) | 2020.10.18 |
우편 번호로 도시 및 주 조회 Google Geocode API (0) | 2020.10.18 |