首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当我运行"SELECT 0 AS COL..“时,MySQL列类型返回decimal或bigint。

当你在MySQL中执行SELECT 0 AS COL...这样的查询时,MySQL会根据上下文来推断列的数据类型。在这种情况下,MySQL可能会将结果列的类型推断为DECIMALBIGINT,这取决于查询的具体上下文和MySQL的版本。

基础概念

数据类型推断:MySQL会根据查询中的表达式和上下文来推断结果列的数据类型。例如,如果表达式中包含小数点,MySQL可能会推断为DECIMAL类型;如果没有小数点且数值较大,可能会推断为BIGINT

相关优势

  1. 灵活性:MySQL能够根据输入自动选择合适的数据类型,减少了开发者的工作量。
  2. 性能优化:选择合适的数据类型可以提高查询效率和存储效率。

类型和应用场景

  • DECIMAL:适用于需要精确计算的金融数据或任何需要固定精度和小数位数的场景。
  • BIGINT:适用于需要存储大整数的场景,如ID号、时间戳等。

可能遇到的问题及原因

如果你发现MySQL返回的数据类型不是你预期的,可能是因为:

  • 上下文影响:查询中的其他部分可能影响了数据类型的推断。
  • 版本差异:不同版本的MySQL可能在数据类型推断上有细微差别。

解决方法

如果你希望明确指定列的数据类型,可以使用CASTCONVERT函数来强制转换数据类型。例如:

代码语言:txt
复制
SELECT CAST(0 AS UNSIGNED BIGINT) AS COL;

或者:

代码语言:txt
复制
SELECT CONVERT(0, UNSIGNED BIGINT) AS COL;

这样可以确保列的数据类型是你所期望的。

示例代码

假设你想确保列类型为BIGINT,可以这样写:

代码语言:txt
复制
SELECT CAST(0 AS BIGINT) AS my_column;

这样,无论MySQL如何推断,结果列的类型都会是BIGINT

通过这种方式,你可以更好地控制查询结果的类型,避免因类型不匹配而导致的潜在问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

理解 MySQL 中的数字类型

存储字符串时指定的类型 VARCHAR(50) 中可接收一个数字作为长度,其实除了字符串类型,数字类型也是可指定该参数的,比如 INT(10),BIGINT(20)。...如果指定了 ZEROFILL,MySQL 在返回该数字时,对于实际位数小于展示宽度的数字,将自动在左边补零。比如列的类型为 INT(5),实际存储了数字 5,返回时会得到 00005。...假如在 Node.js 中使用 mysqljs/mysql 作为数据库连接的模块,在执行请求时,其回调中返回的 fields 入参便包含了列相应的 meta 信息。...因为 D 缺省时默认为 0,所以 DECIMAL(M) 表示 DECIMAL(M,0),现时,MySQL 中,M 缺省时默认为 10,所以 DECIMAL 表示 DECIMAL(10,0)。...进行数字计算时如果有溢出,也会抛错,比如对于 BIGINT 其最大值为 9223372036854775807,因为 MySQL 中默认对数字类型是有符号类型,如下操作会抛错, mysql> SELECT

2.1K20

SQL注入攻击导致BIGINT溢出错误

2、缓冲区溢出 缓冲区是用户为程序运行时在计算机中申请的一段连续的内存,它保存了给定类型的数据,而缓冲区溢出就是通过向程序的缓冲区中写入超过其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其他的命令...# In decimal mysql> select18446744073709551615+1; ERROR 1690 (22003): BIGINT UNSIGNEDvalue is out of...我们知道,如果一个查询成功返回,其返回值为0,所以对其进行逻辑非的话就会变成1,举例来说,如果我们对类似(select*from(select user())x)这样的查询进行逻辑非的话,就会有: mysql...DumpIn One Shot 我们能够一次性转储所有数据库、列和数据表吗?答案是肯定的。但是,当我们从所有数据库中转储数据表和列的时候,只能得到较少的结果,毕竟我们是通过错误消息来检索数据的。...假设,我们在一个数据库中创建了一个31列的数据表。 那么,我们只能看到27个结果,而我的其他4个表和该用户数据表的其他列都无法返回。 ?

2K60
  • Hive SQL使用过程中的奇怪现象|避坑指南

    在Hive和MySQL中,运算两个整数相除,输出的结果都是decimal类型。...,则会返回整形类型 -- Hive中查询 select 10 div 3 -- 输出:3 -- 在MySQL中查询 select 10 div 3 -- 输出:3 区分大小写...1 可以看出:相同的SQL语句,如果使用MySQL,则同一查询将返回1,因为在进行字符串比较时MySQL不区分大小写。...非数值类型的字符串转为数值类型 使用SQL,我们可以使用CAST命令转换表中列的数据类型。如果要将字符串列转换为整数,可以执行以下操作。...-- 返回0 Hive中的视图与SQL查询语句 当我们在Hive中创建视图时,其底层是将视图对应的SQL语句存储到了一张表中的某个字段中,以Hive为例,其元数据中存在下面的一张表: CREATE

    2.3K21

    MySQL文档阅读(一)-数字类型

    当业务需求(例如涉及金钱的数据)要求在数据库中存储精确数值时,需要使用这些类型。在MySQL中NUMERIC也实现为DECIMAL,因此后续针对DECIMAL的叙述也适用于NUMERIC。...在使用ZEROFILL属性时,数字左边空余的部分会由0填充,例如:对于一个定义为INT(4) ZEROFILL的列,给定一个值为5,将显示为0005。...如果你将256存入TINYINT或者TINYINT UNSIGNED列,MySQL会分别存储127或255。...当把一个溢出值赋值给一个浮点数或者一个FIXED-POINT列时,MySQL会截断并存储该数据类型能表示的边界值。 在numberic表达式求值过程中发生溢出,则会导致一个错误。...例如,SIGNED BIGINT的最大值是9223372036854775807, 因此如下的表达式会产生错误: mysql> SELECT 9223372036854775807 + 1; ERROR

    1.3K10

    MySQL数据类型

    在MySQL表中建立属性列:列名称 类型例如:num tinyint unsigned 注意: 尽量不使用unsigned,对于int类型可能存放不下的数据,int unsigned同样可能存放不下,与其如此...,还不如设计时,将int类型提升为bigint类型。...当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844[因为utf中,一个字符占用3个字节],如果编码是gbk,varchar(n)的参数n最大是65532/2=32766...“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,3,…最多65535个;当我们添加枚举值时,也可以添加对应的数字编号。...MySQL筛选函数 集合查询使用find_ in_ set函数: find_in_set(sub,str_list) :如果 sub 在 str_list 中,则返回下标;如果不在,返回0; str_list

    7210

    深入解析实时数仓Doris:Rollup上卷表与查询

    那么当我们进行如下查询时: SELECT user_id, sum(cost) FROM table GROUP BY user_id; Doris 会自动命中这个 ROLLUP 表,从而只需扫描极少的数据量...max_dwell_time min_dwell_time 北京 20 35 10 2 北京 30 2 22 22 上海 20 200 5 5 广州 32 30 11 11 深圳 35 111 6 3 当我们进行如下这些查询时...那么当我们进行如下查询时: mysql> SELECT * FROM table where age=20 and message LIKE "%error%"; 会优先选择 ROLLUP 表,因为 ROLLUP...查询能否命中 ROLLUP 的一个必要条件(非充分条件)是,查询所涉及的所有列(包括 select list 和 where 中的查询条件列等)都存在于该 ROLLUP 的列中。...以下是可以命中Rollup的一些聚合查询的种类, 列类型 查询类型 Sum Distinct/Count Distinct Min Max APPROX_COUNT_DISTINCT Key false

    42910

    【MySQL】数据库的数据类型

    数据类型 一、数据类型分类 mysql 中的数据类型分类如下,其中红色字体的为常用的类型: 二、数值类型 mysql 中表的建立属性列:列名称 数据类型,例如 num int,它与我们平时写的语言数据类型是倒过来的...,注意:尽量不使用 unsigned,对于 int 类型可能存放不下的数据,int unsigned 同样可能存放不下,与其如此,还不如设计时,将 int 类型提升为 bigint 类型。...1 没有出现任何东西,其实 bit 字段在显示时,是按照 ASCII码 对应的值显示,例如我们插入 65,其对应的ASCII码 值位 ‘A’: 如果我们有这样的值,只存放0或1,例如性别,只有男和女,...;而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,3,…最多 65535 个;当我们添加枚举值时,也可以添加对应的数字编号。...find_in_set(sub, str_list) :如果 sub 在 str_list 中,则返回下标;如果不在,返回 0;str_list 用逗号分隔的字符串。

    16810

    MySQL基础数据类型

    比如图片,视频等找一个文件服务器,数据库中只存路径或url。 #3. 时间类型: 最常用:datetime #4....#CHAR类型 对于 CHAR 类型的字符串,MySQL 数据库会自动对存储列的右边进行填充(Right Padded)操作,直到字符串达到指定的长度 N。...而在读取该列时,MySQL 数据库会自动将 填充的字符删除。...这时再通过 SELECT 语句进行查询时,得到的结果是“abc ”,abc 右边有 7 个填充字符 0x20,并通 过 HEX 函数得到了验证。这次 LENGTH 函数返回的长度为 10。...需要注意的是,LENGTH 函数返回的是字节长度,而不是字符长度。对于多字节字符集,CHAR(N)长度的列最多 可占用的字节数为该字符集单字符最大占用字节数 *N。

    5K10

    python第十二周:MySql

    Decimal[Dec]、Numeric),以及近似数值数据类型(Float、Real、Double Precision) 作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT..., 如果左边的值小于或等于右边的值返回true (A返回true #like 子句(模糊查询) 格式:select field1,field2。。。。。...其中%表示任意0个或多个字符 #MySQL排序 格式:select field1,filed2,。。。。 from table_name1,table_name2。。。。           ...#修改数据表结构 当我们需要修改数据表名或者修改数据表字段时,就需要使用到MySQL alter命令 *删除字段 alter table table_name drop column_name; *添加字段...#MySQL null值处理 为处理当提供的查询条件时null时,MySQL提供了三大运算符 名称 描述 IS NULL 当列的值时NULL,返回true IS NOT NULL 当列的值不是NULL时

    1.3K30

    MySQL基础『数据类型』

    (1, 3, 100), (0, 2, 255); mysql> select * from testBIT; 这是因为 查表时,位字段类型默认按 ASCII 的形式显示,查表可以发现,100 正好对应字符...注意: 位字段类型限制的是比特位,而非位数,3 的二进制表示为 0011,已经使用了两个比特位,自然也就超出范围了,所以 bit(1) 只能插入 0 或 1 3.浮点数 3.1.FLOAT MySQL...这是因为 当小数部分不足时,MySQL 自动补齐,补齐后,实际插入的值为 -100.00,有五位数,超出范围,自然就被拦截了 MySQL 也并非是铁面无私,当我们插入的数据小数部分超过指定精度时,MySQL...> desc commentWall; 向其中插入一些留言信息,并在片刻之后修改其中的留言信息 注意: 因为时间戳不允许用户手动插入,所以在插入数据时,不能再使用全列插入的方式,需要指明往哪些列中插入数据...,不存在则返回 0,在 MySQL 中可以直接通过 select 指令执行函数 mysql> select find_in_set('a', 'a,b,c,d,e'); mysql> select find_in_set

    22010

    MySQL(1)——数据类型的选择(一)

    尽量避免 NULL:如果查询中包含可为 NULL 的列,对 MySQL 来说更难优化,因为可为 NULL 的列使得索引、索引统计和值比较都更负责。...不过一般将 NULL 的列改为非 NULL 性能提升比较小,在对应列建索引时应避免设计为可为 NULL。 二、整数类型 存储整数,可以使用的类型及存储空间如下 ?...MySQL 可以为整数类型指定宽度,比如 INT(11),对大多数应用来说是没有意义的,对于存储来说也没有影响。 三、实数类型 可以使用 DECIMAL 存储比 BIGINT 还大的整数。...数据量大的情况下,可以使用 BIGINT 替代,进行相应位数的乘除倍数就行,存储比 DECIMAL 小,计算精确。...当存储 char 值时, MySQL 会删除所有的末尾空格 ② char 适合存储很短的字符串,或所有值都接近同一个长度 两者使用区别 ① 对于经常变更的列,使用 char 更好,因为定长的 char

    1.1K20

    MySQL支持的数据类型

    关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。 MySQL支持的整数类型有TINYINT、MEDIUMINT和BIGINT。...每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。 TIMESTAMP类型有专有的自动更新特性,将在后面描述。...在存储或检索过程中不进行大小写转换。 CHAR列的长度固定为创建表是声明的长度,范围(0-255);而VARCHAR的值是可变长字符串范围(0-65535)。 ? ?...返回顶部 ENUM和SET类型 ENUM中文名称叫枚举类型,它的值范围需要在创建表时通过枚举方式显示。ENUM只允许从值集合中选取单个值,而不能一次取多个值。...SET和ENUM非常相似,也是一个字符串对象,里面可以包含0-64个成员。根据成员的不同,存储上也有所不同。set类型可以允许值集合中任意选择1或多个元素进行组合。

    1.6K30

    MySQL-2

    对于DECIMAL列,可以指定小数点前后所允许的最大位数,则会影响列的空间消耗。DECIMAL只是一种存储格式,在计算中DECIMAL会转换为DOUBLE类型。...有很多种方法可以指定浮点列所需要的精度,这使得MySQL会选择不同的数据类型或在存储时对值进行取舍。这些精度定义是非标准的,所以建议只指定数据类型而不指定精度。...浮点类型在存储同样范围的值时,通常比DECIMAL使用更少的空间。应尽量支队小树进行精确计算时才使用DECIMAL。在数据量比较大时,可以使用BIGINT代替DECIMAL。...数据类型 大小 范围 说明 tinyint 1个字节 有符号(-128 到127),无符号(0到255) 默认为有符号 int 4个字节 有符号(- 2^23 ~ 2^23 – 1) 默认为有符号 bigint...MySQL填充BINARY采用的是\0而不是空格,在检索时也不会去掉填充值。

    82110

    SQL学习笔记三(补充-2)之MySQL数据类型

    #CHAR类型 对于 CHAR 类型的字符串,MySQL 数据库会自动对存储列的右边进行填充(Right Padded)操作,直到字符串达到指定的长度 N。...而在读取该列时,MySQL 数据库会自动将 填充的字符删除。...这时再通过 SELECT 语句进行查询时,得到的结果是“abc ”,abc 右边有 7 个填充字符 0x20,并通 过 HEX 函数得到了验证。这次 LENGTH 函数返回的长度为 10。...需要注意的是,LENGTH 函数返回的是字节长度,而不是字符长度。对于多字节字符集,CHAR(N)长度的列最多 可占用的字节数为该字符集单字符最大占用字节数 *N。...(0.03 sec) mysql> SELECT @a:='MySQL 技术内幕 '; Query OK, 0 rows affected (0.03 sec) mysql> SELECT @a,HEX

    1.8K40
    领券