当MySQL字段类型和传入条件数据类型不一致时,会进行隐形的数据类型转换,如何解决?

问题描述:Mysql存储的数据结构为 varchar, where查询的类型为数字,select语句不会报错,但是update语句会报错
如:select可以查询
select * from sys_user where user_id = 1;
如:update报错:Data truncation: Truncated incorrect DOUBLE value'User9899' ,其中 User9899 为另一个user_id
update sys_user set user_name = '00001', nick_name = '王小小' where user_id = 1;

以下回答引用自chatGpt, 有用的话,请采纳哇!!!
当MySQL字段类型和传入条件数据类型不一致时,MySQL会进行隐式的数据类型转换。这可能会导致一些问题,如数据损坏、查询效率降低等。

为了避免这种情况的发生,我们可以通过以下几种方法来解决:

  1. 明确指定数据类型:在MySQL查询时,我们可以手动指定传入数据的数据类型和目标字段的数据类型,从而避免隐式类型转换。例如,使用CAST或CONVERT函数对数据进行显式转换。
  2. 修改表结构:如果表中的数据类型不适合传入的数据类型,可以通过修改表结构来解决。例如,更改列的数据类型或添加列来适应传入的数据类型。
  3. 数据清洗:数据清洗是在处理数据之前对数据进行更改,清洗不合法的数据。可以使用正则表达式等方法,将传入的数据转换为目标字段类型。
  4. 使用ORM框架:ORM(对象关系映射)框架可以将对象与数据库表映射,从而避免手动编写SQL语句的问题。ORM框架通常会在插入数据时自动选择正确的数据类型,从而避免了数据类型转换问题。

综上所述,为了避免因MySQL字段类型和传入条件数据类型不一致而导致的问题,我们应该使用明确的数据类型转换方法、更改表结构、数据清洗等技术。

User9899是ID?

如果能默认转化为数字格式,那就不会出错,如果带有字母符号什么的,无法转化成数字就会报错,可以把你传进来的转化成varchar再去更新
CAST(123 AS VARCHAR);

解决方案已经知道了, 就是想知道 为什么select语句可以使用, update语句会报错