MySQL临时表异常:log_id有有效值却返回NULL且WHERE查询无结果
临时表log_id列显示值但WHERE条件查询无结果且实际为NULL的问题
我在存储过程内使用临时表存储数据,执行无WHERE子句的查询时能看到插入的数据正确,但针对log_id列(值为100)加WHERE条件查询时却无结果。进一步排查发现,该列实际被识别为NULL,即便无WHERE查询时能看到正确值。
临时表定义
DROP TABLE IF EXISTS tmp_log_ids; CREATE TEMPORARY TABLE tmp_log_ids (value_id BIGINT, log_id INT NOT NULL);
插入记录
INSERT IGNORE INTO tmp_log_ids (value_id, log_id) SELECT value_id, log_id FROM log_table;
各查询及对应结果
- 无WHERE子句查询:
SELECT * FROM tmp_log_ids;
结果符合预期:
# value_id, log_id '1', '100'
- 带WHERE条件查询:
select * from tmp_log_ids where log_id = 100;
结果为空:
# value_id, log_id
- 再次执行无WHERE查询:
select value_id, log_id from tmp_log_ids;
结果显示log_id为NULL:
# value_id, log_ID 1, null
- 排查性查询:
SELECT DISTINCT value_id, log_id, log_id IS NULL, log_id = '', OCTET_LENGTH(log_id), HEX(log_id) FROM tmp_log_ids;
结果:
# value_id, log_id, log_id IS NULL, log_id = '', OCTET_LENGTH(log_id), HEX(log_id) '1', NULL, '1', NULL, NULL, NULL
- 计数查询:
SELECT COUNT(*) FROM tmp_log_ids WHERE log_id IS NOT NULL;
结果:
# COUNT(*) '0'
补充信息
- 存储过程中插入操作实际是在动态SQL中执行的。
- 执行
SHOW COLUMNS FROM tmp_log_ids;的结果:
# Field, Type, Null, Key, Default, Extra 'value_id', 'bigint', 'YES', '', NULL, 'NULL' 'log_id', 'int', 'YES', '', NULL, 'NULL'
请问我忽略了什么?
内容的提问来源于stack exchange,提问作者Rick Scero
相关产品推荐
相关产品推荐

