我正在开发一些旧版 mysql 数据库,其中的表使用 blob 来存储文本信息。我在两个不同的服务器上有这个。一个是 mariadb 实例,另一个是 mysql 实例。
当我运行“SELECT * from TABLE WHERE column1='value'”查询时,mariadb 实例将所有 blob 显示为文本,例如“字符串”(理想的行为)。另一方面,mysql 实例将它们显示为十六进制字符串,例如“0x6120737472696e67”(不可取;最好在输出中看到人类可读的版本“a string”)。
我知道可以使用“CONVERT(column1 using utf8)”类型的查询来显示,甚至可以更改表以将 blob 转换为文本类型列。然而,当查询中需要转换多列时,前者非常麻烦,而后者对我来说是最后的选择。我想要找出的是为什么存在差异,以及是否有办法更改任何设置(在服务器或客户端上)以在 mysql 实例上获得与 mariadb 实例相同的输出。
非常感谢任何帮助。
以下是正在使用的软件版本:
MariaDB:在 Centos 7 上“mysql Ver 15.1 Distrib 5.5.50-MariaDB,适用于 Linux (x86_64),使用 readline 5.1”
MySQL:Centos 9 Stream 上的“mysql Ver 8.0.36 for Linux on x86_64(源代码分发)”
PS:我查看了服务器设置并进行了比较。 MariaDB 使用“latin1”作为character_set_database 和character_set_server 的默认编码。 MySQL 使用“utf8mb4”。在 MySQL 上将其更改为“latin1”对选择查询的输出没有影响 - 仍然显示十六进制。
出现这种情况是因为在 8.0.19 以上版本的 MySQL 客户端中默认启用“二进制为十六进制”选项。可以通过使用 --skip-binary-as-hex 命令行选项轻松克服。
在不同的上下文中找到此信息: