xiaolenglala 2019-09-09 16:30 采纳率: 100%
浏览 2268

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更改类型了?求大神解释一下。

  • 写回答

2条回答 默认 最新

  • 毕小宝 博客专家认证 2019-09-09 16:41
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换