在User-Defined Variables下,MySQL手册文档:
可以从一组有限的数据类型中为用户变量分配值:整数,十进制,浮点,二进制或非二进制字符串或
NULL
值。十进制值和实数值的分配不保留值的精度或比例。除了允许类型之外的类型的值被转换为允许类型。例如,具有时间或空间数据类型的值将转换为二进制字符串。如果为用户变量分配了非二进制(字符)字符串值,则它具有与字符串相同的字符集和排序规则。用户变量的强制性是隐含的。 (这与表列值的强制性相同。)
然而,手册未说明:
支持的整数 size (例如4字节INT
或8字节BIGINT
),无论是有符号还是无符号整数,以及是否应用ZEROFILL
(如果是,使用什么显示宽度);
This sqlfiddle 出现,建议MySQL 5.5.25最多使用BIGINT
,根据作业签名,不会应用任何ZEROFILL
。
固定值和浮点值中使用的精度和比例,因为这不会从赋值中保留;和
字符串的最大长度(以字符和/或字节为单位)。
sqlfiddle被max_allowed_packet
限制为2 20 字节(我无法更改):我猜测 LONGTEXT
支持2 32 字节(4GiB)。
可以安全地依赖哪些限制,特别是在不同的服务器版本和配置中?
答案 0 :(得分:6)
用户变量使用MySQL用于列值计算的相同内部数据类型。这些内部类型足以支持MySQL支持的所有数据类型。
ZEROFILL
,因为这是列的附加属性,而不是数据类型本身。此外,整数用户变量没有宽度;当转换为文本时,它们会根据需要使用尽可能多的数字。LONGTEXT
足够大并且你有足够的内存,那么理论上,字符串应该包含任何max_allowed_packet
值。但是,bug 31898中提到的用户变量的未记录限制为16 MB。