Какую кодировку выбрать для базы чтобы можно было сохранять строки на любом языке и не парить себе мозг?
Добавил модель, передаю post данные с кириллицей, save() отрабатывает, но латиница в базу попадает, а от кириллицы пустое место. боюсь предположить, что будет если кто-то напишет на арабском, китайском или хинди. Что делать?
- Вопрос задан более трёх лет назад
- 2789 просмотров
Простой 8 комментариев
- Вконтакте






Стоит везде выставить utf8mb4_unicode_ci (работает точнее при сортироваках и проч.) или utf8mb4_general_ci (чуть быстрее работает, крайне незначительно, так что имеет смысл именно первый вариант).
Как изменить кодировку базы данных MySQL?
Если информация из базы данных на сайте отображается некорректно, то может потребоваться изменить кодировку всех таблиц базы данных, рассмотрим как это сделать. MySQL может содержать сотни таблиц, поэтому рекомендуем для оперативной смены кодировки выполнить следующие действия:
1. Откройте phpMyAdmin и выберите из списка нужную базу данных.

2. Откройте раздел SQL. (В столбце сравнение показана кодировка сопоставления)

3. Скопируйте запрос, представленный ниже, вставьте его в окно SQL-запроса и измените «нужная_кодировка», «сопоставление» и «имя_базы» на кодировку, которая вам требуется, кодировку сопоставления и имя базы соответственно. Далее нажмите кнопку «Вперед».
SELECT CONCAT(‘ALTER TABLE `’, t.`TABLE_SCHEMA`, ‘`.`’, t.`TABLE_NAME`, ‘` CONVERT TO CHARACTER SET нужная_кодировка COLLATE сопоставление;’) as sqlcode
FROM `information_schema`.`TABLES` t
WHERE 1
AND t.`TABLE_SCHEMA` = ‘имя_базы’
ORDER BY 1

4. В ответе появится список запросов для смены кодировки каждой таблицы. Во вкладке параметры выберите пункт «Полные тексты» и нажмите «Вперед».

5. Скопируйте запросы, которые появились.

6. Вернитесь в раздел SQL и вставьте в окно запроса скопированные данные.

7. Нажмите кнопку «Вперед». Кодировка во всех таблицах базы данных успешно изменена.
Какую кодировку выставить таблице?
Всем привет, скажите вот я написал программу которая работает с Базой Данных mySQL, так вот когда тестировал на Денвере всё было нормально и по русски, но когда перебрался на хостинг все русские слова стали . хотя кодировку не менял. Так вот может надо другую кодировку поставить чтобы русский поддерживался? У меня стоит cp1250_general_ci
Кто-то удалил свой ответ, а вместе с ним ушли в горы мои коментарии.
Вы сказали, что в самой базе на хостинге у вас отображаются знаки вопросов. В phpMyAdmin на хостинге у вас, как я понял, доступ есть. Поэтому создаете БД, «Сравнение» выбираете utf8_general_ci. Дамп локальной базы не упаковываете! Заходим на закладку «Экспорт», снимаем внизу, если стоит, галочку «Сохранить как файл» и жмём «Ок». Копируем в появившемся поле весь дамп, идём в phpMyAdmin на хостинге. Выбираем созданную базу, далее на закладку «SQL», вставляем из буфера сохраненный дамп и жмем «Ок». Вот, как бы и всё. Если база на локалке большая, то возможно придётся переносить каждую таблицу по отдельности. И хорошо бы еще до снятия дампа привести все поля в «Сравнение» utf8_general_ci.
Настройка MySQL — кодировка utf8 / cp1251 / windows-1251
Установка всего программного обеспечения как MySQL, так и прочих пакетов (PHP, Phpmyadmin) была произведена на самом начальном этапе, — если помните, делали мы это командой: apt-get install apache2 php5 php5-mysql mysql-server phpmyadmin — см. подробнее->>>.
На какую процедуру пришлось убить больше всего времени при настройке MySQL, так это настройка кодировки. При извлечении информации из базы средствами PHP русские слова отображаются как вопросительные знаки — . Здесь существует проблема с кодировкой, так как загружаемая MySQL из репозитория Linux (Ubuntu 13.04) имеет кодировку UTF8 вперемешку с latin1, таким образом, любая из кодировок (cp1251 или utf8) при извлечении из MySQL будет отображаться коряво.
Если вам необходимо настроить кодировку cp1251, то первый способ, который легко отыскать в интернете и дающий решение данной проблемы – это просто в скрипт PHP, который у вас извлекает контент из базы, добавить вот такую строку:
mysql_query(«SET NAMES cp1251»);
Если не устраивает вариант, предусматривающий правку скритов, то необходимо править конфигурационный файл MySQL, в этой связи, прежде чем был найден ответ, была перепробована масса всяких вариантов, большинство из которых, вероятно, подходили для ранних версий Linux Ubuntu, но они не работают для UBUNTU 13.04.
default-character-set=cp1251 – не работает
Будем править конфигурационный файл my.cnf, который находится в каталоге /etc/mysql/my.cnf. Причем, если просто в my.cnf (путь — /etc/mysql/my.cnf ) [mysqld] заменить на такой вариант:
[mysqld]
default-character-set=cp1251
сохраняемся и перегружаемся:
service mysql restart
тогда при подключении к phpmyadmin мы получаем вот такую ошибку:
#2002 Невозможно подключиться к серверу MySQL
Взять за основу вышеописанный вариант и пробовать решить проблему по устранению возникающей ошибки, — скорее всего, такие действия не принесут положительного результата.
Рабочая конфигурация my.cnf MySQL
Выбираем другой алгоритм. Для начала входим в MySQL через phpmyadmin. На домашней странице в phpmyadmin видим заголовок «Основные настройки», в подразделе «Сопоставление кодировки соединения с MySQL» выбираем UTF8_UNICODE_ci.
Далее проверим конфигурацию MySQL. В phpmyadmin выберем вкладку SQL и пошлем туда запрос вида:
SHOW VARIABLES LIKE ‘char%’;
в ответ имеем:
| Variable_name | Value |
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
Видим в приведенной конфигурации в двух местах значения latin1, которые необходимо исправить в зависимости от того, какая кодировка вам нужна. Допустим, мы будем заменять на cp1251, поэтому в конфигурационном файле my.cnf, который находится в каталоге /etc/mysql/my.cnf, ищем модуль [mysqld] и меняем его на:
[mysqld] skip-character-set-client-handshake character_set_client=cp1251
character_set_server=cp1251
Делаем рестарт MySQL (перезагрузку необходимо делать всегда после внесения каких-либо изменений): service mysql restart
В phpmyadmin снова посылаем SQL — запрос вида:
SHOW VARIABLES LIKE ‘char%’;
Получаем ответ, исходя из которого видим, что наша конфигурация MySQL поменялась:
| Variable_name | Value |
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | cp1251 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | cp1251 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
У нас latin1 поменялись на cp1251, соответственно сразу после приведения конфигурации MySQL к указанному виду, из базы у нас извлекается все корректно, наконец-то видим русские слова. Вот пример нашего текста, извлекаемого из БД MySQL.
От кодировки БД MySQL теперь переходим к настройкам кодировки сообщений, которые у нас с сайта отправляются на электронную почту, см. PHP отправка на e-mail >>>