mysql字段类型和查询语句数据类型的关系
实验
根据数据库存储的字段类型和查询语句中的数据类型列出下表:
数据库 | 查询语句 | 结果 |
---|---|---|
string | string | ① |
string | int | ② |
int | string | ③ |
int | int | ④ |
结果
素材表:
+-----------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| key | varchar(50) | NO | MUL | | |
| name | varchar(100) | NO | | | |
| key_value | int(10) unsigned | NO | | 0 | |
+-----------+------------------+------+-----+---------+----------------+
| id | key | name | key_value |
+----+--------+-----------+-----------+
| 2 | ddd | zhanghua | 3 |
| 6 | dsssss | mary | 9 |
| 8 | dsssss | mary | 0 |
| 9 | dsll | 王华 | 0 |
| 10 | 7 | 詹姆斯 | 987 |
| 11 | 008 | 孩子 | 13 |
| 12 | 78uu | zhanglei | 13 |
| 13 | ytyy98 | fengxian | 131 |
| 14 | y98ds | lubu | 0 |
| 15 | zore | realfirst | 0 |
+----+--------+-----------+-----------+
结果
进行where查询
-
sting对string
select * from role where(`key`='8'); //查询不到结果,只有当值为'008'的时候才能查询到结果 +----+-----+--------+ | id | key | name | +----+-----+--------+ | 11 | 008 | 孩子 | +----+-----+--------+
-
sting对int
where子句中的数据类型为int的时候,mysql会自动把该行数据转换成int进行对比。select * from role where (`key`=78); +----+------+----------+ | id | key | name | +----+------+----------+ | 12 | 78uu | zhanglei | +----+------+----------+ select * from role where (`key`=007); +----+-----+-----------+ | id | key | name | +----+-----+-----------+ | 10 | 7 | 詹姆斯 | +----+-----+-----------+ select * from role where (`key`=0); +----+--------+----------+ | id | key | name | +----+--------+----------+ | 2 | ddd | zhanghua | | 6 | dsssss | mary | | 8 | dsssss | mary | | 9 | dsll | 王华 | | 13 | ytyy98 | fengxian | | 14 | y98ds | lubu | +----+--------+----------+
-
int对sting
数据库中字段为int型的时候,对于查询语句中的数据会自动转成int型进行查询。比如key_value=“cscd”,会自动转成key_value=0,key_value='13csdc’转成key_value=13。select * from role where(key_value='13csdc'); +----+------+----------+-----------+ | id | key | name | key_value | +----+------+----------+-----------+ | 11 | 008 | 孩子 | 13 | | 12 | 78uu | zhanglei | 13 | +----+------+----------+-----------+ select * from role where(key_value='kjhkj'); +----+--------+-----------+-----------+ | id | key | name | key_value | +----+--------+-----------+-----------+ | 8 | dsssss | mary | 0 | | 9 | dsll | 王华 | 0 | | 14 | y98ds | lubu | 0 | | 15 | zore | realfirst | 0 | +----+--------+-----------+-----------+
-
int对int
不累述;
总结
- 当查询语句里的数据类型为int的时候,会自动把数据库中的字段值进行转化成int型进行类比。
- 当数据库中的字段数据类型为int型的时候,会自动把查询语句中的约束值转成int型进行查询。