그누보드5를 utf8mb4 형식으로 설치 후기 정보
그누보드5를 utf8mb4 형식으로 설치 후기본문
씨아이보드 설치 및 운영 테스를 잠시 멈추고
그누보드를 이용한 utf8mb4 형식으로 설치 운영 테스트를 시작했습니다.
utf8 은 3byte로 저장되지만, 이모티콘 언어 Emoji 은 4byte로 저장이 됩니다.
앞으로 이모티콘 글자를 받지 않을수 없고, 스마트폰의 활용도가 늘어날수록
이미티콘 글자는 더욱 늘것이기에 그누보드5도 그것으로 사용하고자 생각을 했습니다.
씨아이보드일때는 설치에 별 문제없이 utf8mb4 로 잘 되었던 기억이 있었으므로
그누보드도 별 문제 없겠지 하고 설치를 진행했습니다.
설치과정에서 에러가 두둥 뜨더군요
CREATE TABLE IF NOT EXISTS `g5_login` ( `lo_ip` varchar(255) NOT NULL default '', `mb_id` varchar(20) NOT NULL default '', `lo_datetime` datetime NOT NULL default '0000-00-00 00:00:00', `lo_location` text NOT NULL, `lo_url` text NOT NULL, PRIMARY KEY (`lo_ip`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
1071 : Specified key was too long; max key length is 767 bytes
error file : /install/install_db.php
이게 뭐지? 구글을 검색해고 새로운 사실을 알게 되었습니다.
767 bytes 의 의미가 뭔지를
varchar는 767 byte 가 한계이고,
UTF8는 문자 당 3byte를 사용하므로 767 / 3 = 255 자 이며,
UTF8mb4는 문자 당 4 바이트를 사용하므로 767/4 = 191 자 라는것을
그러므로 그누보드의 설치시 선언된 수많은 varchar(255)는 255 x 4 = 1020 > 767 보다 크므로 오류라는 의미였습니다.
그래서 그누보드의 설치파일을 비롯해서 adm 폴더에 있는 varchar(255) 를 varchar(191) 로 변경했습니다.
그리고 설치를 진행하니 이상없이 잘 되네요. ^^
물론 long 데이타가 가능하도록 mysql 설정을 변경할수도 있지만 일반 호스팅 사용자의 경우엔 불가능한 방법이므로 191 로 변경하는 것이 최선이더군요.
저장할때 255자를 체크하는 로직을 본것같은데, 그것을 191자로 변경도 해야하겠네요.
이상은 그누보드5를 utf8mb4 형식으로 설치를 진행 후기입니다.
그외 수정사항은 그누보드5 팁자료실에서 확인할 수 있습니다. ^^
2
댓글 9개
VARCHAR 열의 값은 가변 길이 문자열입니다. 길이는 MySQL 5.0.3 이전에는 0에서 255 사이의 값으로, 5.0.3에서 0에서 65,535 이상의 버전 으로 지정할 수 있습니다 . MySQL 5.0.3 이후의 VARCHAR의 유효 최대 길이는 최대 행 크기 (모든 컬럼에서 공유되는 65,535 바이트)와 사용 된 문자 세트의 영향을받습니다.
라고 적었는데,,, 뭔가 더 필요하네요.... 관련 내용 확인후 추가 댓글 남기겠습니다.
해피정님께서 이렇게 말씀해 주시니 분명 뭔가는 있는데요.
저도 올 초인가? 작년에 모바일은 모르지만 그래도
utf8mb4 방식으로 갈아 타야 하는구나 생각했습니다.
그래서 무작정 설치를 했는데요. 저는 이상 현상이 없었거든요.
다시 설치해 봐야겠습니다. ^^
설치 중 문제가 발생하면 말씀 주신 대처방법으로 대처하겠습니다!
감사합니다.
mysql Ver 15.1 Distrib 10.1.26-MariaDB, for Linux (x86_64) using readline 5.1
감사합니다!!!
table level 에서 ROW_FORMAT=DYNAMIC 또는 ROW_FORMAT=COMPRESSED 사용해야합니다.
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;
참고자룟 http://www.popit.kr/mysql-index-column-size-too-large-error/
고맙습니다.
innodb_file_format=barracuda
innodb_large_prefix=on
[root@localhost ~]# vi /etc/my.cnf.d/server.cnf
[client]
default-character-set=utf8mb4
[server]
character-set-server=utf8mb4
log-bin=mariadb-bin
event-scheduler=ON
[mysqld]
character-set-client-handshake = FALSE
collation-server = utf8mb4_unicode_ci
#init-connect='SET NAMES utf8mb4'
character-set-server = utf8mb4
max_allowed_packet = 32M
slow_query_log
long_query_time = 2
[mariadb]
innodb_file_format=barracuda
innodb_large_prefix=on