Сервер FreeBSD с Mysql и подобным make.conf
.if ${.CURDIR} == ${PORTSDIR}/databases/mysql50-server
WITH_CHARSET=cp1251
WITH_COLLATION=cp1251_bin
BUILD_OPTIMIZED=yes
BUILD_STATIC=yes
.endif
.if ${.CURDIR} == ${PORTSDIR}/databases/mysql50-client
WITH_CHARSET=cp1251
WITH_COLLATION=cp1251_bin
BUILD_OPTIMIZED=yes
.endif
У меня есть таблица mysql с такой структурой
mysql> show create table phpbb_bt_torrents\G
*************************** 1. row ***************************
Table: phpbb_bt_torrents
Create Table: CREATE TABLE `phpbb_bt_torrents` (
`info_hash` char(20) CHARACTER SET cp1251 COLLATE cp1251_bin NOT NULL DEFAULT '',
) ENGINE=InnoDB AUTO_INCREMENT=128511 DEFAULT CHARSET=cp1251
Я поддерживаю это ночью с mysqldump --quote-names --add-drop-table db>db.sql
Если я восстановлю резервную копию с помощью mysql < db.sql
на том же сервере то получаю не совсем те же данные, например:
SELECT hex(info_hash) FROM phpbb_bt_torrents
8CB0701A0C8B7D97653888E8B959A6420AEC7679 становится 8CB0701A0C8B7D9765383FE8B959A6420AEC7679 после восстановления
A9986D2E961E1F407E74E9D18D811DDB702924F5 становится A93F6D2E961E1F407E74E9D18D811DDB702924F5 после восстановления
и так далее ... я заметил, что искажаются только символы 88h и 98h, но их может быть больше.
Есть ли способ сделать резервную копию данных без повреждений?
Я открыл билет на Bugs.MySQL.com
Обходной путь оттуда:
укажите параметр --default-character-set = cp1251. Но этот обходной путь не будет работать с тестовым примером со смешанными наборами символов.
Можете ли вы попробовать сделать дамп с помощью mysqldump --opt ..., а затем восстановить его?
На одном и том же сервере это не должно иметь значения, просто чтобы убедиться, что это не какая-то пользовательская конфигурация.