MariaDB / py mysql: данные отображаются в столбцах в виде шестнадцатеричных значений (0x5761746572 вместо «Вода») - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь создать локальный Docker образ, представляющий версию для разработки моей производственной базы данных. Я запустил контейнер MariaDB с той же версией, что и production (10.1), и загрузил схему, основанную на mysqldump production.

Однако, когда я начинаю вставлять данные, я получаю странные шестнадцатеричные значения в каждом столбце.

Производственные данные выглядят следующим образом:

select * from projects where p_project = 'Water';
+-----------+----------------+------------+----------+-------------+---------+----------+----------+---------+--------------------+
| p_project | p_timestamp    | p_wikipage | p_parent | p_shortname | p_count | p_qcount | p_icount | p_scope | p_upload_timestamp |
+-----------+----------------+------------+----------+-------------+---------+----------+----------+---------+--------------------+
| Water     | 20200305045828 | NULL       | NULL     | NULL        |     841 |      644 |      554 |       0 | 20190813001026     |
+-----------+----------------+------------+----------+-------------+---------+----------+----------+---------+--------------------+

В то время как база данных dev выглядит следующим образом:

select * from projects where p_project = 'Water';
+----------------------+--------------------------------+------------------------+--------------------+--------------------------+---------+----------+----------+---------+----------------------------------------+
| p_project            | p_timestamp                    | p_wikipage             | p_parent           | p_shortname              | p_count | p_qcount | p_icount | p_scope | p_upload_timestamp                     |
+----------------------+--------------------------------+------------------------+--------------------+--------------------------+---------+----------+----------+---------+----------------------------------------+
| 0x5761746572         | 0x3230323030333035303532333538 | 0x                     | 0x                 | 0x                       |    NULL |     NULL |     NULL |       0 | 0x                                     |
+----------------------+--------------------------------+------------------------+--------------------+--------------------------+---------+----------+----------+---------+----------------------------------------+

Производственная база данных определяется следующим образом:

show create database enwp10;
enwp10 | CREATE DATABASE `enwp10` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */ |

И dev:

show create database enwp10_dev;
| enwp10_dev | CREATE DATABASE `enwp10_dev` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */ |

Вот определение таблицы:

show create table projects;
----------------------------------------------------------------------+
| projects | CREATE TABLE `projects` (
  `p_project` varbinary(63) NOT NULL,
  `p_timestamp` binary(14) NOT NULL,
  `p_wikipage` varbinary(255) DEFAULT NULL,
  `p_parent` varbinary(63) DEFAULT NULL,
  `p_shortname` varbinary(255) DEFAULT NULL,
  `p_count` int(10) unsigned DEFAULT '0',
  `p_qcount` int(10) unsigned DEFAULT '0',
  `p_icount` int(10) unsigned DEFAULT '0',
  `p_scope` int(10) unsigned NOT NULL DEFAULT '0',
  `p_upload_timestamp` binary(14) DEFAULT NULL,
  PRIMARY KEY (`p_project`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+----------

Интересно то, что select работает в обоих случаях, так что, возможно, это мой клиент mysql настройки дисплея отключены?

Мои вызовы kwargs для моего py mysql connect включают в себя:

      'charset': None,
      'use_unicode': False,

, который всегда отлично работал в производстве. Кроме того, для базы данных разработки я установил глобальную кодировку сервера «utf8mb4», а для параметров сортировки сервера - «utf8mb4_unicode_ci».

Все таблицы в базе данных разработки определены с CHARSET=latin1, но это также верно для производственных столов.

Есть идеи, что здесь происходит? Спасибо!

1 Ответ

1 голос
/ 05 марта 2020

Проблема заключалась в том, что я использовал двоичный файл клиента mysql, установленный mysql, и протокол должен немного отличаться от этой старой (10.1) версии MariaDB. См. Комментарий к вопросу.

Решением было установить MariaDB для MacOS в правильной версии и использовать /usr/local/mariadb/server/bin/mariadb для подключения к моей docker базе данных.

...