我在MySQL CONCAT()
功能方面遇到了一些问题。我运行了以下内容:
SELECT CONCAT(now(),now())
这就是我的回忆:
323031342d30352d30352031343a33393a3535323031342d30352d30352031343a33393a3535
不确定到底发生了什么?谁看过这个吗?连接任何内容(列,字符串,mysql函数,如now()
)
我的服务器版本为5.1.63 - SUSE MySQL RPM
“,客户端版本为libmysql - mysqlnd 5.0.7-dev - 091210 - $Revision: 304625 $
答案 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'))