11

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?

1
  • 1
    You may want to verify the MySQL version in use. Commented Feb 2, 2014 at 22:59

4 Answers 4

18

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)
Sign up to request clarification or add additional context in comments.

4 Comments

@ChrisSH - I don't remember where I put it... It needs to run once and probably before it makes the DB connection. Maybe in the __init__.py or in settings.py?
this is also worked for sqlalchemy to connect mysql database.
@GünayGültekin - I think the issue is specific to the db adapter used with sqlalchemy and not sqlalchemy itself. Which adapter are you using that this works with?
@GünayGültekin - have you tried passing the charset arg as shown in the docs? It seems like your adapter should support utf8mb4 out-of-the-box (according to the docs).
11

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 !

Comments

0

Fast and easy way.

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

1 Comment

Code only answers are not good. An explanation (with proper references) will make this answer upvote worthy :)
-1

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.