Итак, есть проект. В нем порядка 70 миграций. В них никто не задумывался о UTF8, потому при создании таблиц по дефолту создаются они с collation = latin1_general_ci. После чего русский выводится как “????”.
Смог полечить следующим образом: в файле /etc/mysql/my.cnf прописать
set-variable=default-character-set=utf8
set-variable=default-collation=utf8_general_ci
set-variable=default-collation=utf8_general_ci
Все таблицы создались как положено в UTF8, я счастлив.
В целом, уже с ходу не вспомню. Но после некоторых плясок с бубном, в ситуации, когда необходимо сохранить более ранний принцип работы с latin1, а также сохранить latin1 таблицы, но, при этом, оставить возможность работать с UTF8 полями в этих таблицах…
Создаем базу данных с интересующими нас полями: где нужно, utf8, где не нужно latin1 (этот принцип позволяет использовать скорость и оптимальность latin1, не создавая безсмысленные индексы тройного размера, на поля, где это не есть неоходимым).
На мой взгляд это есть более правильным методом так как в полях [var]char и text часто также находятся данные, в которых не может быть не-latin1 символов ни при каких условия, но использование utf8 здесь приводит к очень серьезным потерям производительности.
В целом же, это вопрос подхода/стиля/специфики.
MrKoin
May 7th, 2007
мускуль это фигня…
DeViL
December 16th, 2007
Фигня – не то слово. Очевидно, именно из-за этого он так закрепился на рынке.
dm
December 16th, 2007