질문/조언질답게시판

최근에 utf8으로 저장되던 것을 utf8mb4로 변경하였습니다.

코어의 /classes/db에서 mysql과 관련된 파일들을 utf8 부분은 전부 utf8mb4로 변경하였습니다.

이모지를 사용하기 위해서 한 작업이었는데 문제가 생긴게 모듈을 설치할 때 데이터베이스를 사용하는 경우에는

테이블 생성이 되지 않더군요.

다시 utf8으로 바꿔주니까 정상적으로 됩니다.

지금은 어쩔 수 없이 다른 웹페이지에서 해당 모듈을 설치하고 문제가 발생한 웹페이지로 옮겨주는 식으로 사용하고 있습니다.

혹시 다른 곳을 더 수정해야 하는 건지 아니면 이렇게 밖에 쓸 수 밖에 없는 것인지 궁금합니다.

  • profile

    utf8mb4로 하면 인덱스 길이가 길어지기 때문에 MySQL의 767바이트 제한을 초과하게 됩니다. 예를 들어 utf8에서는 varchar(255) 컬럼에도 인덱스를 걸 수 있지만 utf8mb4에서는 varchar(191)을 넘어가면 인덱스를 생성할 수 없게 됩니다. (인덱스가 없는 컬럼은 괜찮습니다.) 코어는 물론이고 서드파티 자료 중에도 varchar 컬럼의 길이를 불필요하게 길게 해놓은 것이 많아서, 그대로 utf8mb4로 바꾸면 여기저기서 에러가 날 거예요.

     

    라이믹스에서는 이 문제를 우회하기 위해 XML 파일에 정의된 varchar 컬럼의 길이를 임의로 조정하거나 인덱스 설정을 변경하는 등 여러 가지 꼼수(?)가 적용되어 있습니다. XE에서 이걸 모두 적용하시기는 쉽지 않을 것 같네요. DB 접속에 사용되는 기본 문자셋은 utf8mb4로 해두고, CREATE TABLE 쿼리에는 utf8을 사용하도록 하고, 테이블 생성 후 꼭 필요한 컬럼(글과 댓글의 내용 등)만 수동으로 utf8mb4로 바꿔주셔야 할 것 같습니다.

  • profile profile
    감사합니다! 큰 도움이 됬습니다 ㅎㅎ

서버에 요청 중입니다. 잠시만 기다려 주십시오...