秦小猿 2022-06-18 11:49 采纳率: 0%
浏览 20

mysql的tinyint字段类型判断的疑惑

今天在写SQL语句是,where条件中使用了一个tinyint类型的字段做判断,自己没有留意写错了判断值,神奇的是竟然能查到数据
以下是表和对应的SQL语句
CREATE TABLE `test` (
  `id` int(10) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `type` tinyint(4) NOT NULL COMMENT '类型',
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '名称',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `test`(`id`, `type`, `name`) VALUES (1, 0, '名称0');
INSERT INTO `test`(`id`, `type`, `name`) VALUES (2, 1, '名称1');
INSERT INTO `test`(`id`, `type`, `name`) VALUES (3, 2, '名称2');
INSERT INTO `test`(`id`, `type`, `name`) VALUES (4, 0, '名称4');
执行下面的两条SQL语句,得到的结果竟然是一样的
select * from test where type = 'type ';
select * from test where type = 0;
idtypename
10名称0
40名称4
在网上找了没有看到类似的问题,请教各位,这是什么原因呢?
  • 写回答

1条回答 默认 最新

  • sum墨 2022-06-18 12:55
    关注

    MySQL在数字上下文中静默地将字符串转换为数字。
    通过将前导数字字符转换为数字来实现。如果没有数字,则值为0.
    因此,这相当于‘type' = 0,因为type 第一位为字母,没有数据,假设你的SQL是
    select * from test where type = '1type';
    那么结果为:2 1 名称1

    评论

报告相同问题?

问题事件

  • 创建了问题 6月18日

悬赏问题

  • ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 MATLAB中streamslice问题
  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端
  • ¥15 基于PLC的三轴机械手程序