【问题标题】:MySQL CONCAT("string",longtext) results in hex stringMySQL CONCAT("string",longtext) 生成十六进制字符串
【发布时间】:2013-09-21 08:14:09
【问题描述】:

在尝试将字符串与应为 LONGTEXT 类型的列连接时,我遇到了奇怪的十六进制字符串结果。

查询如下:

SELECT concat("abc",t.LONGTEXT_VALUE,"cde") FROM mytable t

61626354657374696e67636465

十六进制字符串61626354657374696e67636465 是正确的值,只是十六进制形式。

对列本身的 SELECT 将返回正常的字符串:

SELECT t.LONGTEXT_VALUE FROM mytable t

Testing

【问题讨论】:

  • 你是从命令行 mysql 客户端测试这个,还是用其他东西? MySQL 可能会在结果集中(在线上)将其标记为 BLOB,而您的客户端正在“提供帮助”。
  • 一直在尝试使用 mysql 客户端以及来自某些 java 代码的调用。两者都产生相同的结果。

标签: mysql string hex concat


【解决方案1】:

您尝试过投射吗?通常对我来说效果很好。示例:

SELECT CONCAT("abc",CAST(t.LONGTEXT_VALUE AS CHAR),"cde") FROM mytable t

【讨论】:

  • 是的,做演员表工作,但我宁愿找出我的功能出了什么问题,或者首先选择并在那里纠正它。
  • 听起来你只需要添加一个演员表。 ;)
  • 那么这是 MySQL CONCAT 函数的一个错误,即它不应该采用长文本值吗?我应该在某个地方归档吗?因为该函数似乎可以正确地对长文本进行操作(十六进制值是正确的),但是它输出的十六进制格式与输入不匹配。
  • 我现在在 MySQL 的 concat 文档中看到了这一点:dev.mysql.com/doc/refman/5.0/en/…
  • > 如果所有参数都是非二进制字符串,则结果是非二进制字符串。 如果参数包含任何二进制字符串,则结果为二进制字符串。一个数字参数被转换成它等效的二进制字符串形式;如果你想避免这种情况,你可以使用显式类型转换...
【解决方案2】:

当你连接一个没有强制转换的数字时,它会以 blob 形式返回。据我所知,这是 MySQL 的预期功能,它在this bug thread 中报告,他们将其关闭并确认它正在返回一个 Blob。

【讨论】:

    猜你喜欢
    • 2021-07-07
    • 2010-10-04
    • 2018-03-12
    • 2014-03-07
    • 2019-07-27
    • 2011-08-14
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    相关资源
    最近更新 更多