MySQL 如果数据类型如果字符型,存放的字段全是数字,会默认为数值型?

1.创建表 XXLSH lsh流水号字段是 字符型 varchar(10)
create table XXLSH (LSH varchar(10),ZH varchar(10),HM varchar(10) );
2. 插入数据,流水号全部是数值的字符串
insert into XXLSH values('1111','7758998','aaaa');
insert into XXLSH values('2222','7758998','aaaa');
3.进行更新时,where条件不管是字符串还是数值都能更新成功
update XXLSH set HM='xiaohua' where lsh='1111';
update XXLSH set HM='xiaohua' where lsh=2222;
图片说明

4.插入一条数据,此时流水号是‘no123’
insert into XXLSH values('no123','7758998','aaaa');

5.再次进行更新,报错
update XXLSH set HM='xiaoming' where lsh='1111';
update XXLSH set HM='xiaoming' where lsh=2222;
[Code: 1292, SQL State: 22001] Data truncation: Truncated incorrect DOUBLE value: 'no123'
图片说明
原因是条件中数据类型不正确。为什么当表里全是数据类型的字符串时,用数值类型条件更新不报错,当表里存在字符串时,用数值类型会受影响。难道是刚开始,虽然定义的类型是varchar类型,但是实际插入的数据是数字,mysql默认是数值类型了,后边插入的数据存在字符串形式。mysql更改类型了?求大神解释一下。

表的字段类型应该是由建表语句控制的,你可以 desc 看看表结构。
此外,更新时如果字段是字符串,更新 SQL 中设置的参数是数值类型,那么数据库会自动进行转换的,所以能够正确插入。
反之,如果字段定义为数值类型,更新 SQL 中设置的参数是字符串,这时也会自动转换成目标类型,一旦参数有误,转换异常,就出现贴图中的错误提示。
结论:类型不匹配时,存在自动转换过程。

字段类型并没有改变。
这是一个提示警告,不影响执行。
LSH是varchar,where条件2222算是整型。where='2222',严格写sql,vachar类型的用单引号,就不会出这样的提示。
通过你的语句测试,自己的理解,若有误请指点。