AWS RDS를 통해 Mariadb 데이터베이스를 프리티어로 생성을 하였다.
그 후 CKEditor를 사용해 데이터를 DB에 저장하려는 순간
Incorrect string value: '\xF0\x9F\x98\x8A...' for column 'content' at row 1
위의 오류가 발생해버렸다 ..
검색을 해보니 데이터가 들어갈 때 인코딩 설정이 제대로 되어있지 않은 현상이였다 !
보통 설정되어있는 utf-8이여도 아마 위와 같은 오류가 뜰 것이다.
왜냐하면 내가 사용하는 에디터에서 저장되는 것은 이모지, 특수문자들 등의 에디터 기능을 사용한 데이터들이기 때문에 utf-8로도 저장이 안된다고 한다.
그렇다면 나에게 설정이 되어있는 인코딩 방식을 확인해보고 설정을 바꿔주자 !
MariaDB [db1]> SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME
-> FROM information_schema.SCHEMATA
-> WHERE SCHEMA_NAME = '데이터베이스명';
우선 위와 같이 입력을 하면 지금 보는 사진처럼 데이터베이스 현재 문자셋 설정을 확인할 수 있을것이다.
근데 나는 utf-8도 아니였네 .. ? 뭐야 ..
RDS를 처음 사용해봐서 따로 설정을 할 수 있는지는 모르겠지만 나는 따로 설정한 거 없이 생성을 했었다 .. 그래서 그런가 ?
우선 원인을 찾았으니 데이터베이스 자체의 설정을 바꿔주도록 할것이다.
MariaDB [db1]> ALTER DATABASE 데이터베이스명 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
변경한 설정을 보면 utf8mb4_unicode_ci 이것으로 변경한 것을 봤을것이다.
이건 문자열에 이모지나 특수문자 등을 저장할 수 있는 인코딩이다.
그럼 이렇게 변경이 된 것을 확인할 수 있다.
위처럼 데이터베이스 설정을 바꾸어주었는데 똑같은 오류를 뱉는다 .. 왜이러지 ..
찾아보니 데이터베이스 말고도 테이블 설정도 바꿔봐야하는 것 같다.
ALTER TABLE 테이블명
CONVERT TO CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
자.. 이제 되겠지 ?
야호 드디어 저장이 됐다 !
다행히 .. 해결 되었다 ㅎㅎ
우선 문제는 에디터의 있는 기능들을 사용하고 그 데이터를 DB에 저장하려다가 발생한
Incorrect String Value 문제를 만났고
이 문제를 해결하기 위해 데이터베이스의 문자셋을 변경을 해주었다.
하지만 데이터베이스의 문자셋을 변경하고도 똑같은 문제가 계속 발생하여
해당 테이블에 대한 문자셋도 같이 변경을 해주었더니 정상적으로 데이터가 저장이 되었다.
이 설정이 정답인지는 모르겠지만 현재 마주친 문제는 다행히 해결이 되었으니 뭐 ..
후에 더 설정을 해줘야하거나 잘못된게 있으면 다시 정리를 하러 찾아오겠다 !!