【问题标题】:Store 128 bit binary number in MYSQL binary data type以 MYSQL 二进制数据类型存储 128 位二进制数
【发布时间】:2021-06-13 06:38:16
【问题描述】:

在我的研究中,我看过 MySql insert statement to binary datatype?https://dba.stackexchange.com/questions/904/mysql-data-type-for-128-bit-integers

但我似乎无法复制他们的结果。

我正在将棋盘的 64 个方格转换为 64 位二进制数

像这样 000010010100010110100011011001000100011110001010001000100000110

我在 mysql 表中有一个二进制类型的列(8)

我的假设是它需要大小为 8 字节,因为它是 64 位,但是它声称我试图提供的输入太大。

我只能在二进制数据类型上找到很少的资源,我知道我一定犯了一些错误,我认为它试图将每个值作为字符读取,但我不知道为什么。

请帮助我如何将这么大的数字存储在我的表中。

【问题讨论】:

  • BLOB 这样的“二进制”数据类型不代表数字,只是二进制数据。它们通常用于存储图像、MP3 音频、视频等。
  • 啊我知道我一定是误解了它是什么类型,所以如果我需要存储两个 64 位数字,我应该把它分成两个 Big Int 吗? Big Int 的搜索速度如何?
  • 这取决于您希望如何搜索和/或更新它。也许UNSIGNED BIGINTCHAR(64) 会更容易。
  • 这里是link 我解释了我打算做什么,我目前正在用信息填充一个虚拟数据库并运行一些测试以查看哪些数据类型可以让我获得最佳搜索速度并最小化空间

标签: mysql sql binary


【解决方案1】:

MySQL 将数字文字 000010010100010110100011011001000100011110001010001000100000110 解释为大于 8 个字节的十进制数。

二进制数据类型的工作方式类似于 char/varchar/text,但值可以是任何字节序列。

您可以使用带有适当转义的字符串文字,但很难手动阅读这些文字。

最方便和通用的方法(据我所知)是使用HEXUNHEX 函数在十六进制表示和实际数据中的字节之间进行转换。例如:

INSERT INTO tbl (col) VALUES (UNHEX('5BA238AEB1E956BDEA214C4C7FE9951B'))


SELECT HEX(col) FROM tbl

你也可以使用二进制数文字:

INSERT INTO tbl (col) VALUES (0b000010010100010110100011011001000100011110001010001000100000110)

如果值为 64 位,您可以使用 BIGINT 字段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-01
    • 2010-11-09
    • 1970-01-01
    • 2017-12-02
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    相关资源
    最近更新 更多