为什么MySQL自定义变量中的整数输出带有引号

k10s72fa  于 2022-10-31  发布在  Mysql
关注(0)|答案(1)|浏览(177)
SELECT score ,TRIM(BOTH "" FROM  ink) as   `rank` FROM (
SELECT
    score,
     @r :=
IF (@p = score, @r, @r + 1) AS ink,
 @p := score
FROM
    scores,
    (SELECT @r := 0, @p := NULL) init
ORDER BY
    score DESC)dep

print{"headers": ["score", "rank"], "values": [[4.00, "1"], [4.00, "1"], [3.85, "2"], [3.65, "3"], [3.65, "3"], [3.50, "4"]]}

79/5000我在MySQL中做了一个自定义的整型变量,输出后引号比标题还多,然后我用函数去掉了引号,但输出结果还是在那里,这种情况让我很困惑,希望有人能解答一下,谢谢。

oknwwptz

oknwwptz1#

  1. TRIM()输出的数据类型是string。因此双引号字符不是值的一部分。它们是PHP在转储的值时添加的,以标记数据类型是string。
    1.如果你想获得numeric数据类型的输出列(在这种情况下PHP不会添加双引号),使用ink + 0CAST(ink AS UNSIGNED)
    DEMO fiddle。注意列调整中的值-字符串左对齐,数字右对齐。
    另外,如果你把@p的初始值从NULL改为score中不存在的值(例如,-1''等),那么@r := IF(@p = score, @r, @r + 1)可能被简化为@r := @r + (@p = score)
    --
    我想知道为什么我定义了@r=0,它不应该是一个整数,但输出值却用引号括起来- johnson
    这是用户自定义变量处理功能。
    服务器无法预测将来(在您的查询中--在处理下一行时)将为变量分配什么数据类型的值。因此,它使用最常见的数据类型作为用户定义变量,这种数据类型可以接受任何数据类型的值。最常见的数据类型是二进制字符串(更准确地说是LONGBLOB)。
    此外,所有用户定义变量值都存储在PERFORMANCE_SCHEMA.user_variables_by_thread表中,相应列数据类型为LONGBLOB

相关问题