查看此查询(MariaDB 10.11.4)
DROP TEMPORARY TABLE IF EXISTS temp_table;
CREATE TEMPORARY TABLE temp_table AS
SELECT field_a as number, field_b as name FROM my_table;
DESCRIBE temp_table;
字符串
其输出
| 领域|类型|Null|关键|默认|额外|
| --|--|--|--|--|--|
| number| bigint(20)unsigned|没有||||
| 名称|中文(简体)|没有||||
但只要我对一个虚拟数据做UNION
:
DROP TEMPORARY TABLE IF EXISTS temp_table;
CREATE TEMPORARY TABLE temp_table AS
select field_a as number, field_b as name from my_table
union
select null as number, 'dummy' as name from my_table;
DESCRIBE temp_table;
型
现在,number
的数据类型从bigint(20) unsigned
更改为decimal(20,0)
| 领域|类型|Null|关键|默认|额外|
| --|--|--|--|--|--|
| number|十进制(20,0)|是的||||
| 名称|中文(简体)|没有||||
为什么会这样?
我已经通过转换null
解决了这个问题,但是我想知道是否有什么可以调整的地方,而不是编辑我的查询语句(有太多了!)
select field_a as number, field_b as name from my_table
union
select cast(null as unsigned) as number, 'dummy' as name from my_table;
型
就是这张table
CREATE TABLE
`my_table` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`field_a` bigint(20) unsigned NOT NULL,
`field_b` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE = InnoDB
型
1条答案
按热度按时间jecbmhm31#
好吧,正如@danblack所指出的,这是一个bug。我将把它留在这里,以防有人在这个问题上出错。