Это довольно просто.Экспорт/Импорт MySQL в/из разных наборов символов
У меня есть работающие таблицы db с DEFAULT CHARSET = utf8; Значение сортировки равно utf8_general_ci.
Все работает нормально. Приложение, использующее эту базу данных, сохраняет что-либо от мандарина (китайца) до шведского, и все хорошо и хорошо.
Однако. У db есть следующие настройки.
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/
Как вы можете видеть, по неизвестным причинам дб имеет character_set_database и character_set_server набор в latin1.
Это не создает проблемы для приложения, которое его запускает, поэтому мы в порядке, но всякий раз, когда мы экспортируем и импортируем, в db, где все переменные charachter_set_ * установлены на utf8 или utf8mb4 (что похоже, является новым нормальным), это заставляет нас делать дополнительный запрос SET NAMES для каждого сеанса с базой данных, то есть это дорого и раздражает.
Есть ли способ исправить это, не повреждая данные или нарушая работу приложения?
Каковы подходящие настройки для MySQL, когда дело доходит до настроек персонажа, учитывая, что вы хотите запустить на нем глобальное приложение, и где я устанавливаю его так, чтобы он сохранялся не только на сеансе, но и навсегда (я полагаю, my.cnf).
Спасибо.
EDIT
Добавление значений от начала export.sql-файла. экспортировать, используя следующую строку
mysqldump --opt --u root -pPassword dbName | gzip > database.sql.gz
- сервер версии 5.6.21-журнал
/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */;
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */;
/*!40101 SET @[email protected]@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @[email protected]@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @[email protected]@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @[email protected]@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `so_and_so_blabla`
...
EDIT 2
Добавление вывода из SELECT, Col, шестнадцатеричном (COL) из табл , Обратите внимание, что это отлично работает как в исходном db AND при экспорте, так и в том, что я в db, где я импортировал данные, использует SET NAMES latin1, прежде чем я выхожу запрос.
Europas Länder 4575726F706173204CC383C2A46E646572
Спасибо за ответ. Пытаться понять, что вы имеете в виду. В вашем ответе вы начинаете с «нет». На что вы отвечаете «нет»? Мой главный вопрос заключается в том, как переместить данные в базу данных, которая позволяет мне пропустить первоначальный запрос «set names» для «latin1», который я должен сделать сегодня, чтобы заставить работу работать правильно после экспорта/импорта. – Adergaard
Извините за «нет»; Я удалил его. И попросил больше информации. –
Добавлена информация на вопрос. Посмотрите все под ** ИЗМЕНИТЬ ** Как вы можете видеть, он использует SET NAMES utf8, хотя сервер установлен на latin1 (хотя ВСЕ таблицы находятся в utf8). – Adergaard