프로젝트를 진행하다보니 데이터베이스에 이모티콘(✅햇살 가득한 집 👍 맞춤형 중개 💖💖코로나 보다 강한 컨디션과 방크기!! 양창!!💖💖)을 넣어야했습니다. 기존 UTF-8 charset 만으로는 DB에 저장할 수 없다고 해서 DB를 만들 때 utf8mb4 설정을 해줬는데도, DB에서는 django.db.utils.operationalerror incorrect string value utf8mb4 not work
이런 식의 에러를 계속 뱉어내더군요. 결론은 장고와 mysql을 연결할 때 charset 을 추가 설정해주면 됩니다.
DB를 처음 세팅하는 것부터 한 번 해봅시다.
mysql에서 아래와 같이 데이터베이스를 만드는 명령어를 입력합니다. danaebang
의 자리에 만들고자 하는 데이터베이스 이름을 넣으시면 됩니다. 이름 뒤에 나오는 character set
설정으로 이 데이터베이스가 utf8mb4
를 받아들일 수 있도록 합니다.
mysql> create database danaebang character set utf8mb4 collate utf8mb4_general_ci;
Query OK, 1 row affected (0.00 sec)
이 설정을 하고 mysql에서 show variables like 'c%';
를 쳐보면 utf8mb4
설정이 된 것을 볼 수 있습니다.
원래는 이 과정까지만 하면 끝인줄 알았는데, 장고에도 추가로 설정을 넣어줘야했습니다.
장고와 mysql을 연결하는 과정은 아래 글에 설명해두었습니다.
DATABASES = {
'default' : {
'ENGINE': 'django.db.backends.mysql', [1]
'NAME': 'daneabang', [2]
'USER': 'root', [3]
'PASSWORD': 'password', [4]
'HOST': 'localhost', [5]
'PORT': '3306', [6]
}
}
기존에는 위와 같이 6번까지만 설정을 했습니다. 하지만 이렇게만하면 장고에서 DB에 이모티콘을 넣으려고 하면 에러가 납니다. 이모티콘도 받을 수 있게 아래와 같은 설정을 7번과 같이 추가해줍니다.
DATABASES = {
'default' : {
'ENGINE': 'django.db.backends.mysql', [1]
'NAME': 'danaebang', [2]
'USER': 'root', [3]
'PASSWORD': 'password', [4]
'HOST': 'localhost', [5]
'PORT': '3306', [6]
'OPTIONS’ : { [7]
‘charset’ : utf8mb4’
}
}
}
이 설정을 모두 마무리하고 데이터를 넣어주면 아래와 같이 이모티콘이 이쁘게 DB에 들어간 것을 볼 수 있습니다.