쉽게 쉽게

[MariaDB] Incorrect string value 에러(charset 변경) 본문

DB/MYSQL와 MariaDB

[MariaDB] Incorrect string value 에러(charset 변경)

곱마2 2024. 12. 19. 14:17
반응형

▤ 목차

    1. 이슈

    MariaDB에서 이모지를 저장할 때, Incorrect string value 에러가 나타났다.

    해당 원인을 분석해보니 MariaDB에 설정된 charset은 UTF8이 해당 이모지를 지원하지 않았기 때문이다.

    UTF-8은 최대 3바이트 지원하지만 이모지는 4바이트가 필요하기 때문에 이를 저장하기 위해서는 utf8mb4 캐릭터셋을 사용해야 했다.

    따라서 UTF-8을 utf8mb4로 변경하는 과정이 필요했다.

    2. 캐릭터셋(charset) 변경

     1. 캐릭터셋과 정렬방식 확인

    SELECT default_character_set_name, DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA 
    WHERE schema_name = '테이블명';
    SHOW VARIABLES LIKE 'character_set%';
    SHOW VARIABLES LIKE 'collation%';

    해당 명령어를 통해 현재 DB의 Charset(캐릭터셋)과 Collation(정렬방식)이 어떤지 확인할 수 있다.

     2. 캐릭터셋과 정렬방식 수정

    ALTER DATABASE 테이블명 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    ALTER TABLE 테이블명 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

    해당 명령어를 통해 DB의 Charset(캐릭터셋)과 Collation(정렬방식)을 변경할 수 있다.

    위와 같이 수정했다면 MariaDB에 디폴트로 적용되어 있는 설정도 수정해야 한다.

    보통은 /etc/my.cnf에 DB설정 정보가 위치해 있고 utf8을 utf8mb4로, utf8-general-ci를 utf8mb4-unicode-ci로 수정해야 한다.

     3. DB설정 수정

    //수정전
    [mysqld]
    ...
    character-set-server=utf8
    collation-server=utf8_general_ci
    
    [client]
    ...
    default-character-set=utf8

     /etc/my.cnf에 접속하여 위의 설정을 아래처럼 수정해줬다.

    //수정후
    [mysqld]
    ...
    character-set-server=utf8mb4
    collation-server=utf8mb4-unicode-ci
    
    [client]
    ...
    default-character-set=utf8mb4

    필자는 vi 명령어를 통해 수정했는데, 필요하다면 아래의 내용을 참고하길 바란다.

    2024.03.17 - [서버/리눅스] - 리눅스 명령어 정리

     

    리눅스 명령어 정리

    1. 리눅스 기본 명령어 명령어 설명 사용예시 cd Change Directory의 약자로 디렉터리를 이동하는 명령 # cd /parents/test test 디렉터리로 이동 # cd .. 바로 상위의 디렉터리로 이동 '..'은 현재 디렉터리의

    minsu092274.tistory.com

    만약 my.cnf 파일수정시 readonly option is set (add to override) 오류가 뜨는 경우

    :w!  => 강제로 저장하기 기능을 사용하거나 root계정으로 접근하여 다시 시도해보면 된다.

    설정 변경 후 MariaDB를 재시작해주면 된다.

    systemctl restart mariadb;

     

    https://riverblue.tistory.com/36

     

    Mysql, MariaDB Incorrect string value 이모티콘 이모지 에러

    푸핫에 맛집을 업로드 하면서 설명에 이모티콘을 넣었는데 컬럼에 데이터를 저장할 수 없다는 Incorrect string value 에러가 나왔다. 원인은 간단했다. 테이블에 설정되어있던 charset은 UTF-8이었는데 M

    riverblue.tistory.com

    잘못된 내용이 있다면 지적부탁드립니다. 방문해주셔서 감사합니다.
    반응형