首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MariaDB / pymysql:数据在列中显示为十六进制值(0x5761746572而不是“水”)

问MariaDB / pymysql:数据在列中显示为十六进制值(0x5761746572而不是“水”)
EN

Stack Overflow用户
提问于 2020-03-05 13:36:14
回答 1查看 50关注 0票数 0

我正在尝试创建一个本地Docker镜像,它代表我的生产数据库的开发版本。我已经启动了一个与production (10.1)版本相同的MariaDB容器,并加载了一个基于production的mysqldump的模式。

然而,当我开始插入数据时,我在每一列中都会得到奇怪的十六进制值。

生产数据如下所示:

代码语言:javascript
复制
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数据库看起来像:

代码语言:javascript
复制
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                                     |
+----------------------+--------------------------------+------------------------+--------------------+--------------------------+---------+----------+----------+---------+----------------------------------------+

生产数据库的定义如下:

代码语言:javascript
复制
show create database enwp10;
enwp10 | CREATE DATABASE `enwp10` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */ |

而dev是:

代码语言:javascript
复制
show create database enwp10_dev;
| enwp10_dev | CREATE DATABASE `enwp10_dev` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */ |

下面是表的定义:

代码语言:javascript
复制
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客户端显示设置关闭了?

我的pymysql connect调用的kwargs包括:

代码语言:javascript
复制
      'charset': None,
      'use_unicode': False,

它在生产中总是运行得很好。此外,我已经将开发数据库的全局服务器字符集设置为'utf8mb4‘,服务器排序规则设置为'utf8mb4_unicode_ci’。

开发数据库中的所有表都是用CHARSET=latin1定义的,但生产表也是如此。

你知道这是怎么回事吗?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2020-03-05 14:00:30

问题是我使用的是mysql安装的mysql客户端二进制文件,协议必须与这个旧的(10.1)版本的MariaDB略有不同。请参阅对问题的注释。

解决方案是为MacOS安装适当版本的MariaDB,并使用/usr/local/mariadb/server/bin/mariadb连接到我的docker数据库。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60538788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档