从你的问题听起来好像你在试图将一个无符号整数转换成一个有符号整数,这将导致在删除数字的实际符号的符号位之后,将该值Map到某个负值。首先,mysql的整数类型范围是-2147483648到2147483647,因此您使用的测试值太小,无论如何都看不到,即使它可能发生,但它不能。 这个 SMALLINT 类型的无符号范围为0到65535,有符号范围为-32768到32767。但是,这是不可能使用的 CAST 或者 CONVERT 对…施加价值 SMALLINT . 你所能做的就是 SIGNED 或者 UNSIGNED ,但这将再次使用整数类型。 出于教育目的,我还尝试创建一个带有签名的表 SMALLINT 列,然后插入值 65520 看看会发生什么。结果如何? Out of range value for column 'col' at row 1 . 所以,我们也不能用这个选项来获得你想要的行为。
1条答案
按热度按时间py49o6xq1#
从你的问题听起来好像你在试图将一个无符号整数转换成一个有符号整数,这将导致在删除数字的实际符号的符号位之后,将该值Map到某个负值。首先,mysql的整数类型范围是-2147483648到2147483647,因此您使用的测试值太小,无论如何都看不到,即使它可能发生,但它不能。
这个
SMALLINT
类型的无符号范围为0到65535,有符号范围为-32768到32767。但是,这是不可能使用的CAST
或者CONVERT
对…施加价值SMALLINT
. 你所能做的就是SIGNED
或者UNSIGNED
,但这将再次使用整数类型。出于教育目的,我还尝试创建一个带有签名的表
SMALLINT
列,然后插入值65520
看看会发生什么。结果如何?Out of range value for column 'col' at row 1
. 所以,我们也不能用这个选项来获得你想要的行为。演示