varchar 列上的 MySQL first_value 返回格式错误的记录

Posted

技术标签:

【中文标题】varchar 列上的 MySQL first_value 返回格式错误的记录【英文标题】:MySQL first_value on varchar column returns records in wrong format 【发布时间】:2019-06-03 04:22:43 【问题描述】:

mysql 中的 first_value 函数以意外格式返回 varchar 列。

我有一个包含两列的表“测试”

create table test (col1 varchar(10), col2 integer);

并且有这样的记录,

当我运行 first_value 函数时,我会得到这样的记录

select *, first_value(col1) over(partition by col1 order by col2 desc) as max_col1 
from test;

这是因为 first_value 仅适用于数字字段吗?

【问题讨论】:

mysqltutorial.org/mysql-window-functions/… 请不要粘贴代码(或示例数据)的屏幕截图而不提供与文本相同的内容。它使人们很难重建您的环境。请参考如何create a Minimal, Complete, Verifiable example的“完整”标题。 【参考方案1】:

这是因为 first_value 仅适用于数字字段吗?

不,first_value() 也适用于 varchar 数据类型。 您得到的结果是正确的,但采用 十六进制 格式!0x6B657931key10x6B657932key20x6B657933key3 因此,这可能是整理问题或您正在使用的软件问题。 如果您使用的是类似小提琴的网站,那么结果就是这样就不足为奇了。 无论如何,你可以在这里找到更多:https://dev.mysql.com/doc/refman/8.0/en/charset-syntax.html 如果问题仍然存在,您可以随时使用unhex() 函数:

select unhex('6B657931')

将返回:

key1

或者:

select CAST(0x6B657931 AS CHAR)

也会返回:

key1

请参阅demo。

【讨论】:

我使用的是 HeidiSQL,无论如何您的回答“CAST(0x6B657931 AS CHAR)”对我有用! :)

以上是关于varchar 列上的 MySQL first_value 返回格式错误的记录的主要内容,如果未能解决你的问题,请参考以下文章

VARCHAR 列上的 ISNUMERIC 仍然返回数字吗?

在 MySql 中的 Varchar 列上设置索引

无法使用 SSIS 将 SQL Server varchar(max) 传输到 MySQL 文本

当另一列具有特定值时,列上的 NOT NULL 约束

在生产数据库中减少列大小并修剪数据,处理同一列上的约束/依赖关系

数组列上的 Postgres 全文搜索