【问题标题】:Storing something as unsigned tinyint in php在php中将某些东西存储为无符号的tinyint
【发布时间】:2011-08-01 22:26:55
【问题描述】:

有没有办法在 php 中将我的数字显式存储为 tinyint(1 字节而不是 4)。

或者我只能通过将它们 4 x 4 存储在 int 中来强制执行此操作吗? (使用一些二元运算)

我通过使用 str_split 分解字符串并通过 unpack('C', ..) 将这些字节解释为整数来生成这些值。 目前我将这些值作为单个整数存储在一个数组中,但如果我能以某种方式将它们存储为 tinyints,它可以节省大量空间。

【问题讨论】:

  • TINYINT 是一种 SQL 数据类型 - php 没有类型。但是,您可以使用 (int)$x 或 intval($x) 强制类型
  • 我有点困惑。标题说“(...) in php”,但您却在谈论存储数据。你想有一个tinyint in php,还是你想把一个tinyint 保存到一个数据库from php?
  • 我想在 php.ini 中使用它。假设我可以在 php 中强制执行类型,我会创建一个数组并用 tinyints 填充它。
  • 我想我可以再次将我的整数转换为 1 个符号字符串。但这会使它们难以访问,而且我不知道 1 个符号字符串是否实际上在内部存储为 1 位数据。
  • @theHampster 你说 php 没有类型,但我可以将类型强制到变量上?所以在内部它使用类型对吗?我只是希望我的整数在内部存储为 1 个字节,而不是当前的 4 个(整数)。

标签: php types int tinyint


【解决方案1】:

PHP 有两种数据类型可供您在这里使用:integerstring
PHP 没有任何其他类型可供您选择(float 不是整数的好选择,其他类型不合适)。

一个 int 通常是 32 或 64 位,一个字符串是每个字符 1 个字节。* 我建议除非你有 很多 的数字,否则你永远不会看到 32 位的任何问题整数。如果您绝对希望保护 space 内存** 并且您的号码最多为 3 位,您可以将您的号码作为字符串处理。甚至还有BCMath 扩展,它可以让您直接对字符串数字进行操作,而无需来回转换它们。不过,对于可能非常有限的收益来说,这会带来很多麻烦。

看到 MySQL TINYINT通常用于布尔值,请注意 PHP 确实有布尔类型...!


* 每一个字节字符一个字节,即。
** 由于 PHP 脚本通常只是非常临时的,您应该只遇到 peak 内存使用问题,而不是存储空间问题。获得更多 RAM 可能是比玩类型更有效的解决方案。

【讨论】:

  • 我确实有很多整数,所以我只想看看我所有的选择,我猜我最好的选择可能是完全重新考虑我目前的方法。 BCMath 确实似乎收益太少,因为 255 仍然需要 3 个字符(3 个字节)。然而,如果我通过打包它们将它们存储为 1 个字符串,并在我再次需要它们时解包,是否会为每个数字节省 3 个字节,对吗?
  • 想一想我的数组在存储我的整数(或字符串)时使用的键也可能需要 4 个字节。我猜你是对的,我只是在寻找我的问题错误的地方。
  • @Antiz 是的,确实,packing 和 unpacking 显式写入单字节字符串是另一种保护内存的方法,但更麻烦。如果您需要对数字类型进行如此多的控制,那么无论您尝试做什么,PHP 都可能是错误的语言。
猜你喜欢
  • 2011-02-13
  • 1970-01-01
  • 1970-01-01
  • 2016-06-23
  • 1970-01-01
  • 2014-05-12
  • 1970-01-01
  • 2010-09-12
相关资源
最近更新 更多