MySQL CONCAT()返回不可读的文本

时间:2014-05-05 19:53:13

标签: mysql concat

我在MySQL CONCAT()功能方面遇到了一些问题。我运行了以下内容:

SELECT CONCAT(now(),now())

这就是我的回忆:

323031342d30352d30352031343a33393a3535323031342d30352d30352031343a33393a3535

不确定到底发生了什么?谁看过这个吗?连接任何内容(列,字符串,mysql函数,如now()

时会发生这种情况

我的服务器版本为5.1.63 - SUSE MySQL RPM“,客户端版本为libmysql - mysqlnd 5.0.7-dev - 091210 - $Revision: 304625 $

1 个答案:

答案 0 :(得分:5)

看起来像可打印ASCII字符的十六进制表示:

hex: 32 30 31 34 2d 30 35 2d 30 35 20 31 34 3a 33 39 3a 35 35
char: 2  0  1  4  -  0  5  -  0  5     1  4  :  3   9 :  5  5

我无法解释为什么客户端将字符数据显示为十六进制; 我会调查字符集编码不匹配的可能性。

<击>

MySQL客户端库可能正在使用latin1,但应用程序正在使用不同的编码;但我们希望这会影响所有字符表达式,而不仅仅是CONCAT()表达式。

实际上,客户端更有可能显示二进制字符串的十六进制,并且从CONCAT()返回的值被报告为二进制字符串。

以下摘自MySQL 5.1 documentation for CONCAT() function

  

返回连接参数产生的字符串。可以   有一个或多个参数。如果所有参数都是非二进制字符串,   结果是一个非二进制字符串。如果参数包含任何二进制文件   字符串,结果是二进制字符串。数字参数是   转换为等效的二进制字符串形式;如果你想避免   也就是说,您可以使用显式类型转换,如下例所示:

SELECT CONCAT(CAST(int_col AS CHAR), char_col);

因此,解决方法可能是使用CAST或可能使用DATE_FORMAT函数将NOW()的值作为字符进行CAST,例如。

CONCAT(DATE_FORMAT(NOW(),'%Y-%m-%d %h:%i:%s'),DATE_FORMAT(NOW(),'%Y-%m-%d %h:%i:%s'))