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 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置