mysql中int类型单引号问题

本文探讨了在MySQL中,当查询语句中的整型ID被误加引号时,数据库如何自动转换数据类型以进行查询。通过实例展示了当字符串包含数字时,编译器将如何选择数字部分进行类型转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天写mysql的时候发现了一个问题,在查询的时候不小心把int类型的id加上引号查询了,但是也能查询出来,

SELECT * FROM `account` WHERE aid='1';

于是查询了很多资料,最后得出的结论是,mysql会自动转换:当你类型为int 但传入的值为varchar 他会把前几个'数字挑出来'
转换为int 类型来进行查询
如果你的 aid = 1     你查询语句是SELECT * FROM 表名 WHERE aid='1dasd';
在编译的时候,编译器会把  1   挑出来进行转换,在进行查询,
    
如果你的 aid = 1     你查询语句是SELECT * FROM 表名 WHERE aid='dasd';  
第一个不为数字,所以无法转换,查询出来的结果就为空(不会报错),     

如果你的 aid = 1     你查询语句是SELECT * FROM 表名 WHERE aid='123da';
在编译的时候,编译器会把  123   挑出来进行转换,在进行查询,但查询结果为空(找不到这个对应的id);

如果你的 aid = 1     你查询语句是SELECT * FROM 表名 WHERE aid='da1sd';
查询结果为空,因为编译期是从第一个开始查看是否为数字,如果不是不会往后查;

### Mysql 中反单引号的使用方法 在 MySQL 查询中,反引号(`)用于标识数据库对象名称,如数据库名、表名和列名。这有助于区分保留字或包含特殊字符的对象名称。 #### 语法说明 当对象名称与 MySQL 的保留关键字相同或是包含空格或其他特殊字符时,应该使用反引号将其包围起来。例如: ```sql SELECT `select`, `from` FROM `my table`; ``` 这里 `select` 和 `from` 是 SQL 关键词,而 `my table` 包含了一个空格;如果不引号,则会引发解析错误[^2]。 对于普通的字母数字组合以及下划线组成的标识符来说,在大多数情况下可以省略反引号。但是为了保持一致性并防止潜在冲突,建议总是上它们。 #### 实际应用案例 考虑创建一个名为 "user_data" 的表格,并定义其中某些字段也带有特殊字符或者同名于 SQL 预留关键词的情况: ```sql CREATE TABLE IF NOT EXISTS `user_data` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `first name` VARCHAR(50), `last_name` VARCHAR(50), `date of birth` DATE, `group` ENUM('admin', 'member') ); ``` 在这个例子中,“first name”, “date of birth” 含有空格,而 `group` 则是一个 SQL 预留关键字。因此这些都需要用反引号括起来以确保正确识别。 另外值得注意的是,虽然可以在字符串常量里使用单引号或双引号来表示文本值,但这两种方式并不适用于标识符命名上。只有反引号才能用来包裹这样的名字[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值