여분필드 77개 이상 추가되지 않을때 정보
여분필드 77개 이상 추가되지 않을때본문
아무리 구글을 검색해봐도 안나와서 결국엔 방법을 찾았네요. 여분필드가 varchar(255) 일경우 필드가 77개 이상 만들어지지 않더군요. 생각하면 간단한거였는데 몰랐어요.
참고사이트 : http://dev.mysql.com/doc/refman/5.0/en/column-count-limit.html
여기에 글을 읽어보니까 이렇게 나와 있더라고여.
Every table (regardless of storage engine) has a maximum row size of 65,535 bytes. Storage engines may place additional constraints on this limit, reducing the effective maximum row size.
The maximum row size constrains the number (and possibly size) of columns because the total length of all columns cannot exceed this size. For example, utf8 characters require up to three bytes per character, so for a CHAR(255) CHARACTER SET utf8 column, the server must allocate 255 × 3 = 765 bytes per value. Consequently, a table cannot contain more than 65,535 / 765 = 85 such columns.
Storage for variable-length columns includes length bytes, which are assessed against the row size. For example, a VARCHAR(255) CHARACTER SET utf8 column takes two bytes to store the length of the value, so each value can take up to 767 bytes.
위 얘기는 UTF-8 에서 3바이트를 사용하는데 varchar 를 255로 해놓으면 765 바이트가 되고, 이것을 65535 로 나누면 최대 85컬럼이 만들어진다.. 뭐 그런 얘기인것 같습니다.
그러니 (추가여분필드 76개 + 기존에 여분필드10개 하면) = 86개 정도가 제한이 걸리는게 딱 맞아떨어지더라고여.
결과론으로 따져보면, MySQL 버전 5.0.3 이후에서 varchar 값이 0~65,535의 값을 가진다라고 되어 있더라고여.
그래서 list.skin.php 내용에서
ALTER TABLE $g4[write_prefix]$bo_table ADD wr_{$di} VARCHAR(65535) NOT NULL
이렇게 넣으니까 여분필드가 76개까지 만들어지던것이 100개 이상 만들어지더군요.
이것에 대해서 그누보드 질문답변 게시판에서도 명확한 답변이 없어 직접 찾아봤습니다.
varchar(255) 를 실제로 phpmyadmin 에서 살펴보니 varchar(255) 로 나오고,
varchar(65535) 이렇게 해놓았더니 mediumtext 로 나오더군요.
혹시 저 처럼 헤매시는분이 계실까봐 올려봅니다.
참고로, mediumtext = 16Mib, longtext = 4GiB 입니다...
참고사이트 : http://dev.mysql.com/doc/refman/5.0/en/column-count-limit.html
여기에 글을 읽어보니까 이렇게 나와 있더라고여.
Every table (regardless of storage engine) has a maximum row size of 65,535 bytes. Storage engines may place additional constraints on this limit, reducing the effective maximum row size.
The maximum row size constrains the number (and possibly size) of columns because the total length of all columns cannot exceed this size. For example, utf8 characters require up to three bytes per character, so for a CHAR(255) CHARACTER SET utf8 column, the server must allocate 255 × 3 = 765 bytes per value. Consequently, a table cannot contain more than 65,535 / 765 = 85 such columns.
Storage for variable-length columns includes length bytes, which are assessed against the row size. For example, a VARCHAR(255) CHARACTER SET utf8 column takes two bytes to store the length of the value, so each value can take up to 767 bytes.
위 얘기는 UTF-8 에서 3바이트를 사용하는데 varchar 를 255로 해놓으면 765 바이트가 되고, 이것을 65535 로 나누면 최대 85컬럼이 만들어진다.. 뭐 그런 얘기인것 같습니다.
그러니 (추가여분필드 76개 + 기존에 여분필드10개 하면) = 86개 정도가 제한이 걸리는게 딱 맞아떨어지더라고여.
결과론으로 따져보면, MySQL 버전 5.0.3 이후에서 varchar 값이 0~65,535의 값을 가진다라고 되어 있더라고여.
그래서 list.skin.php 내용에서
ALTER TABLE $g4[write_prefix]$bo_table ADD wr_{$di} VARCHAR(65535) NOT NULL
이렇게 넣으니까 여분필드가 76개까지 만들어지던것이 100개 이상 만들어지더군요.
이것에 대해서 그누보드 질문답변 게시판에서도 명확한 답변이 없어 직접 찾아봤습니다.
varchar(255) 를 실제로 phpmyadmin 에서 살펴보니 varchar(255) 로 나오고,
varchar(65535) 이렇게 해놓았더니 mediumtext 로 나오더군요.
혹시 저 처럼 헤매시는분이 계실까봐 올려봅니다.
참고로, mediumtext = 16Mib, longtext = 4GiB 입니다...
추천
0
0
댓글 5개
아... 그런 비밀이 있었군요. 감사합니다.
이런 정보가... 감사합니다.
text 형태로 컬럼을 만들어도 실제 저장될때는 동일한 이슈가 생깁니다.
한 row 에 저장될수 있는 최대 크기가 정해져 있습니다.
(컬럼만 많고 실제 저장되는 데이타가 없거나 적은 경우는 정상 동작 됩니다.)
테이블을 분리하거나, noSql 을 사용하는게 좀더 좋은 방법이 아닐까 합니다.
한 row 에 저장될수 있는 최대 크기가 정해져 있습니다.
(컬럼만 많고 실제 저장되는 데이타가 없거나 적은 경우는 정상 동작 됩니다.)
테이블을 분리하거나, noSql 을 사용하는게 좀더 좋은 방법이 아닐까 합니다.
컬럼을 추가하는 대신
row를 증가하는 방법으로 바꾸시는 건 어떤가요?
row를 증가하는 방법으로 바꾸시는 건 어떤가요?
배우고 갑니다!