Набор символов django со странностью MySQL
Я вижу
OperationalError (1267, "Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='")
Похоже, что некоторые из моих переменных являются строками UTF8
'name': 'Значок p\xc7\x9d\xca\x87\xc9\x9f\xc4\xb1\xc9\xa5s'
Это проблема конфигурации? Если так, как я могу решить это? Я хотел бы обрабатывать все в Unicode (я думаю).
2 ответа
Похоже, по умолчанию ваша база данных имеет значение latin1_swedish_ci и поэтому не может принимать все символы utf8. Вам необходимо изменить конфигурацию таблиц базы данных MySQL, чтобы использовать utf8_general_ci. Хороший пост об этом (со ссылками на инструмент) можно найти на MySQL Performance Blog
Вы можете изменить кодировку таблицы через оболочку:
$ manage.py shell
>>> from django.db import connection
>>> cursor = connection.cursor()
>>> cursor.execute('SHOW TABLES')
>>> results=[]
>>> for row in cursor.fetchall(): results.append(row)
>>> for row in results: cursor.execute('ALTER TABLE %s CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;' % (row[0]))
Вы добавите ОПЦИИ в файл настроек django, как показано ниже:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'OPTIONS': {'charset': 'utf8mb4'},
'NAME': 'sarpanchDb',
'USER': 'root',
'PASSWORD': 'tiger',
'HOST': 'localhost',
'PORT': '',
},
}
Также вам нужно будет внести изменения в файл /etc/mysql/my.cnf
[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
Затем перезапустите службу MySQL
sudo service mysql restart
Перекрестная проверка работала или нет, используя следующий запрос
SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR
Variable_name LIKE 'collation%';
Вы должны получить следующий вывод
+--------------------------+--------------------+
| Variable_name | Value |
+--------------------------+--------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| collation_connection | utf8mb4_unicode_ci |
| collation_database | utf8mb4_unicode_ci |
| collation_server | utf8mb4_unicode_ci |
+--------------------------+--------------------+
10 rows in set (0.00 sec)