Amit Talmor
Amit Talmor

Reputation: 8194

Django + MySQL - Unknown encoding: utf8mb4

MySQL 5.5.35 Django 1.6.1

In order to support emoticons in the DB, I have configured in my django settings:

'OPTIONS': {'charset': 'utf8mb4'}

On MySQL connection, I get this error: LookupError: unknown encoding: utf8mb4

How should I configure Django/MySQL in order to support utf8mb4?

Upvotes: 11

Views: 14072

Answers (4)

addmoss
addmoss

Reputation: 702

This worked in my case (MySQL 5.7 + Django 3.1):

Configure Django:

'ENGINE': 'django.db.backends.mysql',
'OPTIONS': {
 'charset': 'utf8mb4' 
}

Configure MySQL database

  1. make sure all db tables are using InnoDB storage engine (this is important; the next step will probably fail if you skip it)
  2. change the Collation for all your tables to utf8mb4_general_ci

Upvotes: -1

Meikel
Meikel

Reputation: 21

Fast and easy way.

connection = mysql.connector.connect(user='username',
                                   password='mypass',
                                    host='localhost',
                                     database='mydb',
                                       use_pure=True,
                                      charset='utf8'
                                      )

Upvotes: 0

nanchen
nanchen

Reputation: 111

If you really need utf8mb4, follow the steps in https://mathiasbynens.be/notes/mysql-utf8mb4, and make sure your python package "MySQL-python" version is >= 1.2.5 !

Upvotes: 11

Tim Tisdall
Tim Tisdall

Reputation: 10392

https://code.djangoproject.com/ticket/18392#comment:10

As a workaround, you can make python understand 'utf8mb4' as an alias for 'utf8':

import codecs
codecs.register(lambda name: codecs.lookup('utf8') if name == 'utf8mb4' else None)

Upvotes: 18

Related Questions