Как конвертировать кодировку базы данных MySQL
Нужно изменить кодировку базы данных? В этой статье разберем как быстро изменить кодировку для баз MySQL через SQL-запросы.
Пройдемся отдельно как задать новую кодировку для базы, таблицы и отдельных полей таблицы.
Также советуем перед изменениями сделать резервную копию БД, чтобы в случае чего вернуть файлы к рабочему состоянию.
Конвертация кодировки для всей базы
Перед выполнение команд следует подключится серверу MySQL по SSH. После для изменения кодировки базы используем команду:
ALTER DATABASE `newbd` COLLATE utf8_danish_ci
где `newbd` — название базы данных;
utf8_danish_ci — кодировка, которую необходимо установить.
Чтобы проверить установленную кодировку базу, вводим в консоль команду:
На выводе команды получим все конфигурации для указанной базы данных, ищем поле “collation_database” в нем указана кодировка.
Изменение кодировки для таблицы базы данных
Для таблицы кодировка меняется похожим способом, но уже через команду ALTER TABLE:
ALTER TABLE `название_таблицы` COLLATE utf8_danish_ci ;
где `название_таблицы` — название таблицы, для которой меняем кодироку;
и utf8_danish_ci — желаемая кодировка.
Изменение кодировки для полей таблицы
Если есть необходимость, можно изменять кодировку даже в отдельных полях. Чтобы это сделать, используем ALTER TABLE после задаем название таблицы, поле, тип данных и на какую кодировку меняем:
ALTER TABLE `название_таблицы` CHANGE `название_поля` VARCHAR(40) CHARACTER SET cp1251 COLLATE cp1251_general_ci;
Где CHARACTER SET CHARACTER меняет набор символов базы данных по умолчанию, а COLLATE параметры сортировки базы данных по умолчанию.
Как узнать кодировку sql файла?

Сам столкнулся с проблемой кодировок. И на сколько я понял, SET NAMES ведь устанавливает кодировку данных. При этом сам файл .sql может быть в другой кодировке.
Например, в моём случае,
в Windows 10 при создании дампа через PowerShell 5.1 командой «.\mysqldump example > example.sql» создаётся файл в кодировке UTF16(всё зависит от настроек командной строки). Это можно проверить в углу Блокнота при открытии файла. При этом везде в настройках, в системных переменных Mysql будет UTF8.
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- Python
- +1 ещё
Как формировать сырые SQL запросы максимально эффективно?
- 2 подписчика
- 14 часов назад
- 65 просмотров
Кодировка базы данных MySQL – выводим из запоя пьющие базы
От автора: вы зачем полное ведро баз на мусорку несете выбрасывать? Сервер китайский попался, и все строки иероглифами отображаются? Так кодировка базы данных MySQL не та, наверное. Кто ее закодирует, она же база? Понятно! Идите, гражданин дальше. Не обращаем на него внимания. Сегодня мы познакомимся с кодировками в MySQL.
Зачем кодировать БД?
Сразу хочу вас заверить, что у нас ни одной «пьющей» базы нет. Поэтому данная кодировка никак не связана с чрезмерным употреблением «горячительных» напитков. Наоборот, все БД кодируются для того, чтобы пользователи (то есть мы с вами) могли прочитать содержащуюся в них информацию. Понятно, что непонятно и без полулитра не разберешься? :). Давайте обойдемся пока без этого крайнего средства. Сейчас все поясню!
Код MySQL, как и любая другая информация в вычислительной технике, задается с помощью сочетания единицы и нуля, которые образуют биты. Вспоминаете? Это ведь основы информатики, которые все мы проходили в школе.
В мире существует множество текстовых кодировок (сочетаний 0 и 1), но в современности все они более-менее стандартизированы. Хотя и сейчас можно наткнуться на «абракадабру», если неправильно задать кодировку.

На данном этапе развития всемирной паутины самыми распространенными являются 3 типа кодировок:
Мы не будет сильно «зарываться» в теоретическом ворохе. Для получения более детальной информации перейдите по расположенным выше ссылкам на соответствующие публикации в Википедии.
Для нас самой главной кодировкой базы данных MySQL является UTF-8. Это значит, что в ней используется 8-битный Юникод для представления всех символов. Благодаря широкой поддержке данной кодировки в Сети и на прикладном уровне вы можете быть уверены, что записи в базе будут сохранены в читаемом виде (без «абракадабр»).
Где ее искать?
Немного пробежимся по интерфейсу phpMyAdmin. Зайдя на первую страницы программы, обратите внимание на раздел «Общие настройки».

Параметр «Сопоставление кодировки соединения с MySQL» устанавливает, с какой кодировкой должен сравниваться формат полученных данных при подключении к серверу СУБД. В этой программной оболочке кодировку можно задать вручную.
В «родных» утилитах СУБД (mysqladmin, mysqlimport и других) кодировка таблиц MySQL берется из настроек операционной системы ПК. В случае их отсутствия устанавливается значение, заданное по умолчанию. Чаще всего, это кодировка latin1.
При соединении с СУБД клиентская сторона с помощью значений нескольких системных переменных говорит MySQL, какую кодировку использовать при обработке и отображении данных из БД.
Системные переменные и их значения
Архитектура MySQL построена на основе «клиент-сервер». Системные переменные (точнее их значения) используются при установке соединения клиента и сервера для корректного отображения всех данных, их обработки и поддержания сетевого сеанса.
Для ознакомления с установленными значениями переменных системы СУБД в phpMyAdmin нужно в последнем пункте верхнего меню «Еще» выбрать «Переменные».

После этого вам станут доступны для просмотра и редактирования все системные переменные. Настоятельно рекомендую не менять установленных значений, если не знаете «что почем». На устранение причиненного вреда может уйти много времени. Также это чревато плохим настроением, преждевременной сединой и проявлением других симптомов профессиональных болезней сисадминов :).

Также список всех переменных (в том числе и тех, которые нужны для настройки кодировка MySQL) можно получить с помощью команды show variables.

Вернемся к полученному списку переменных, и остановимся на тех, которые начинаются с charset. Краткое описание тех, которые могут пригодиться:
character_set_client – указана кодировка, в которой будут поступать данные с клиентской стороны.
character_set_connection – устанавливает кодировку соединения.
character_set_database –набор символов, используемы в БД по умолчанию.
character_set_results – кодировка, в которой сервер отправит данные клиенту.
character_set_server –используемая по умолчанию на сервере.
Вот тут перед описанием следующей группы переменных, необходимых для того, как узнать кодировку базы MySQL, следует покопаться в теории.
Под кодировкой мы подразумеваем набор символов, применяемых для определенной структуры данных (базы, таблицы, поля). Но есть еще такое понятие как «представление» (collation), которая соответствует конкретному языку и используется при сравнении и упорядочивания записей.
Например, есть кодировка UTF-8. Существует огромное количество представлений в рамках одной кодировки. Нельзя сравнивать данные, «представленных» в разных наборах символов. Это можно осуществлять только в рамках одной кодировки. Последние 3 переменные как раз и показывают установленные представления.

Разрешенные сравнения для конкретной кодировки на текущем экземпляре сервера, можно узнать с помощью команды show collation. Например:
Как определить кодировку при востановлении БД?
Необходимо востановить базу данных
Есть дамп (см. атач), был получен не мною через mysqldump cкорее всего с дефолтными параметрами
Вопрос — как правильно опеределить/востановить кодировку, чтоб поля с русскими данными отображались коректно?
Читал здесь, но для дальнейших «эксперементов» остался вопрос как определить использованную кодировку.
Метод перебора кодировок тоже не дал результатов — я так понимаю, что данные конвертировались несколько раз перед тем как попасть в файл дампа.
Вложения
| dump_part.sql.txt (1.5 Кб, 74 просмотров) |
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Как определить кодировку html-страницы при скачивании?
Доброго времени суток уважаемые! Почитал аналогичные темы — не помогло. Задача следующая: 1.

Как автоматически определить кодировку при открытии текстового файла?
Есть прорамма типа блокнот. Для текста используется RTB. После открытия файла у пользователя есть.
ошибка при востановлении системы
Здравствуйте, не могу сбросить винду до заводских настроек, пробовал сброс через настройки, вроде.
Ошибка при востановлении базы
Здравствуйте друзья Выскакивает такая ошибка при востановлении базы.
Почетный модератор
11329 / 4301 / 444
Регистрация: 12.06.2008
Сообщений: 12,385
Похоже, что дамп испорчен. В таблице помечено, что там должно быть latin1 (значение по умолчанию) но пытались записать туда UTF-8. в результате многие символы испортились и теперь прочитать содержимое уже нереально.
Сообщение от Humanoid 
и теперь прочитать содержимое уже нереально.
Как то грустно.
Была еще идея исправить вручную с помощью «найти и заменить все» (например, понятно что в рядке «USA», «Ð¡Ð¨Ð?»=»США» т.е. С=С, Ш=Ш). Но как то уж слишком трудоемко, и не факт что все буквы можно угадать правильно.
Может еще какие идеи будут?
Вообще в каком формате мускл хранит текстовые данные? Т.е. если в таблице изначально была прописана не правильная кодировка (latin1) это влияет на способ хранения текста (например в utf8 или cp1251) или это только вносит проблемы при получении данных из таблицы (например если я знаю что как раз эти данные в utf8 или cp1251 я могу обработать их отдельно)
Почетный модератор
11329 / 4301 / 444
Регистрация: 12.06.2008
Сообщений: 12,385
Сообщение от zhuiks 
Была еще идея исправить вручную с помощью «найти и заменить все» (например, понятно что в рядке «USA», «Ð¡Ð¨Ð?»=»США» т.е. С=С, Ш=Ш)
Как раз про это я и говорю. многие символы испорчены. И уже перевести буквы из одной кодировки в другую не получится.
Сообщение от zhuiks 
Вообще в каком формате мускл хранит текстовые данные?
Он хранит данные в том формате, в котором указано при создании таблицы. Например, в твоём случае указано DEFAULT CHARSET=latin1. это и есть кодировка самих таблиц. Когда работаешь с БД, то в первую очередь нужно указать, в какой кодировке работает твой скрипт. это делается через SET NAMES <кодировка>. похоже, что ты этого не сделал. В результате все твои данные он воспринимал как всё тот же latin1, но на самом деле ты передавал ему данные в другой кодировке (скорее всего в cp1251 или в UTF-8 ). В результате он пытался записать эти символы в таблицу, в которую эти символы записать он не может. Поэтому они и портились.
кодировка>
Когда создаёшь таблицу, то обязательно указывай кодировку, в которой она должна хранить данные:
CREATE TABLE имя таблицы> (перечисление столбцов>) ENGINE=название движка> DEFAULT CHARSET=кодировка>
И при каждом подключении к серверу MySQL нужно первым делом выполнять команду
SET NAMES кодировка>
Но тут указывается не кодировка таблицы, а та кодировка, в которой будут поступать данные серверу в этом подключении.
Например, можно создать таблицу с кодировкой UTF-8
CREATE TABLE tab1 (id INT UNSIGNED NOT NULL,name VARCHAR(50) NOT NULL,PRIMARY) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Допустим, что скрипт работает в кодировке cp1251. тогда нужно при подключении к базе указывать
SET NAMES cp1251;
При этом все записываемые данные MySQL будет автоматически переводить из cp1251 в UTF-8. а все читаемые данные наоборот — будет переводить из UTF-8 в cp1251, и только после этого передавать скрипту.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Определить кодировку при записи в текстовый файл
Выдает, что gedit не может определить кодировку при записи в текстовый файл. Как это исправить.
Как определить кодировку сайта?
Здравствуйте уважаемые верстальщики. Подскажите как мне определить кодировку в которой приходит.
Не знаю как определить кодировку
У меня есть скрипт, который извлекает из странички ее мета теги и название, но в браузере, если.