DJango:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
...
'OPTIONS': {
'charset': 'utf8mb4',
'use_unicode': True, },
},
}
my.cnf:
[mysqld]
character-set-server=utf8mb4
default-collation=utf8mb4_unicode_520_ci
[client]
default-character-set=utf8mb4
Но вам также необходимо изменить определения таблицы :
Предполагая, что таблица CHARACTER SET utf8
и правильно закодирована в utf8; want utf8mb4:
ALTER TABLE tbl CONVERT TO CHARACTER SET utf8mb4;
Чтобы изменить один столбец, нужно указать CHARACTER SET utf8
, который правильно закодирован в utf8; и вы хотите, чтобы utf8mb4 не касался других столбцов:
ALTER TABLE tbl MODIFY COLUMN col ... CHARACTER SET utf8mb4;
(Обязательно сохраните остальные спецификации - VARCHAR, NOT NULL и т. д. c.)
больше
Любые правильно закодированные данные в таблицах будут преобразованы в utf8mb4 (практически не работает).
Для экспериментов:
CREATE TABLE test LIKE existing_table;
SHOW CREATE TABLE; -- to see the old schema
INSERT INTO test SELECT * FROM existing_table;
ALTER TABLE test CONVERT TO CHARACTER SET utf8mb4;
SHOW CREATE TABLE; -- to see the new schema
SELECT * FROM test; -- to see the data
SELECT col, HEX(col) FROM test WHERE ...; -- to check encoding
Где
`existing_table` is some table with utf8 characters in it.
`col` and `...` limit the SELECT to one row with accented letters.