Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL自定义变量的存储限制_Mysql_Variables - Fatal编程技术网

MySQL自定义变量的存储限制

MySQL自定义变量的存储限制,mysql,variables,Mysql,Variables,在下,MySQL手册文档: 用户变量可以从一组有限的数据类型中分配一个值:整数、十进制、浮点、二进制或非二进制字符串,或NULLvalue。十进制值和实数值的赋值不会保留值的精度或比例。允许类型以外的其他类型的值将转换为允许类型。例如,将具有时间或空间数据类型的值转换为二进制字符串 如果为用户变量分配了非二进制(字符)字符串值,则该变量与字符串具有相同的字符集和排序规则。用户变量的强制性是隐式的。(这与表列值的强制性相同。) 但是,手册并未说明: 受支持整数的大小(例如4字节INT,或8字节B

在下,MySQL手册文档:

用户变量可以从一组有限的数据类型中分配一个值:整数、十进制、浮点、二进制或非二进制字符串,或
NULL
value。十进制值和实数值的赋值不会保留值的精度或比例。允许类型以外的其他类型的值将转换为允许类型。例如,将具有时间或空间数据类型的值转换为二进制字符串

如果为用户变量分配了非二进制(字符)字符串值,则该变量与字符串具有相同的字符集和排序规则。用户变量的强制性是隐式的。(这与表列值的强制性相同。)

但是,手册并未说明:

  • 受支持整数的大小(例如4字节
    INT
    ,或8字节
    BIGINT
    ),它们是有符号的还是无符号的,以及是否应用了
    ZEROFILL
    (如果是,使用什么显示宽度)

    似乎表明MySQL 5.5.25将使用最多
    BIGINT
    ,根据分配进行签名,并且不会应用任何
    ZEROFILL

  • 固定值和浮点值中使用的精度和比例,前提是赋值时不保留这一点;和

  • 字符串的最大长度(以字符和/或字节为单位)。

    sqlfiddle受220字节的
    max_allowed__packet
    的限制(我无法更改):我猜支持232字节(4GiB)的
    LONGTEXT


可以安全地依赖哪些限制,特别是在不同的服务器版本和配置之间?

用户变量使用与MySQL用于计算列值相同的内部数据类型。这些内部类型对于MySQL支持的所有数据类型都足够大

  • 整数没有
    零填充
    ,因为这是列的附加属性,而不是数据类型本身的属性。此外,整数用户变量没有宽度;当转换为文本时,它们会根据需要使用尽可能多的数字
  • 浮点值没有刻度。64位IEEE浮点数是二进制值,精度足以容纳大约18位十进制数字
  • 理论上,如果
    max\u allowed\u packet
    足够大并且您有足够的内存,字符串应该包含任何
    LONGTEXT
    值。但是,如中所述,用户变量的未记录限制为16 MB

谢谢,这是我的工作设想。我不认为你可以引用一些权威作为参考?用户变量的属性没有文档记录。唯一的权威是源代码,但这不能保证将来的版本会有任何内容。