发布网友 发布时间:2022-04-22 10:00
共4个回答
热心网友 时间:2023-10-31 09:50
SQL语句中的值跟数据库表中字段的数据类型不匹配。
要是转为varchar是可以转回来的,但是转为了char类型,所以就转不回来了,因为char类型有个长度,不足这个长度的会用空格填充,所以一个数字多了很多个空格后就不是合法的数值格式了。
结果再 用相同语句想把类型转回smallint,就报错在将 varchar 值 '*' 转换成数据类型 int 时失败,注意 :字符varchar转数据类型int和数据类型int转字符vachar的语句是不同的。
varchar特点:
1、使用比固定长度类型(char)占用更少存储空间(除了使用ROW_FORMAT=FIXED创建的MyISAM表)。
2、使用额外的1-2字节来存储值长度,列长度<=255使用1字节保存,其它情况使用2字节保存。例如varchar(10)会占用11字节存储空间,varchar(500)会占用502字节存储空间。
3、节约空间,所以性能会有帮助。在更新的时候会产生额外的工作。
4、5.0以上版本,取值或设置值都会保存字符串末尾的空格,4.1之前的版本都会把字符串末尾的空格删除掉。
5、最大长度远大于平均长度,很少发生更新的时候适合使用varchar,因为碎片更少了。
以上内容参考:百度百科-varchar
热心网友 时间:2023-10-31 09:50
你要是转为varchar应该是可以转回来的,但是你是将他转为了char类型,所以就转不回来了,因为char类型有个长度,不足这个长度的会用空格填充,所以一个数字多了很多个空格后就不是合法的数值格式了。热心网友 时间:2023-10-31 09:51
先不说你这个报错,单是你这个语句里,S和M两个表的关系在哪里?靠什么关联?追答这个也有可能是数据引起的,看不到数据不太容易判断
热心网友 时间:2023-10-31 09:52
各种嵌套233,厉害了,