gpt4 book ai didi

sql - 按位异或,在 SQL 中固定长度的二进制字符串(240 字节)

转载 作者:行者123 更新时间:2023-12-01 05:25:08 28 4
gpt4 key购买 nike

我在数据库中存储了一个 240 字节(1920 位)的二进制字符串(目前是 MySQL,但我想保持数据库独立)。

我需要执行以下操作:

UPDATE `my_table` SET `data` = `data` ^ 'new_data' WHERE `id` = 'field_id'

我相信 SQL 语法按位 XOR 仅适用于高达 6b 位的值。

我在文本字段中使用十六进制编码存储数据,但如有必要,我可以将其更改为保存二进制数据的 blob 字段。

目前我正在使用 PHP 加载该字段。然后我正在做 XOR 并将其写回。

但是,此字段对所有脚本都是全局的,并且此方法存在以下风险:
Script X Loads Data0
Script Y Loads Data0
Script X Generates Data1 = Data0 ^ new_data1
Script Y Generates Data2 = Data0 ^ new_data2
Script X writes Data1
Script Y writes Data2 Error: dosen't contain new_data1

如果这是使用 SQL 语句完成的,则如下所示:
UPDATE `my_table` SET `data` = `data` ^ 'new_data1' WHERE `id` = 'field_id'
UPDATE `my_table` SET `data` = `data` ^ 'new_data2' WHERE `id` = 'field_id'

通过避免上述错误,数据库将在那里按顺序执行查询

如果我使用 64 位整数来存储这些数据,那么由于大小的原因,我必须将其分成 30 个单独的值。这个选项不合理。

有谁知道实现这一目标的数据库独立方式?

最佳答案

考虑编写 C 语言用户定义函数 (UDF) 来执行此操作。许多数据库 MySQL、PostgreSQL、Oracle 等都支持 C UDF。

它们速度快并且可以很好地集成到 SQL 中,因为它们被称为任何其他存储过程。不幸的是,每个数据库的创建语法和绑定(bind) API 都不同。

这是 MySQL 的文档

http://dev.mysql.com/doc/refman/5.0/en/udf-compiling.html

和 MySQL 的 Codeproject 示例

http://www.codeproject.com/Articles/15643/MySQL-User-Defined-Functions

和 PostgreSQL 文档 http://www.postgresql.org/docs/9.2/static/xfunc-c.html

PostgreSQL 源代码中有许多 C UDF 的示例。
http://doxygen.postgresql.org/

PostgreSQL 使 UDF 更进一步,允许创建基于 C 的用户定义类型和运算符。

关于sql - 按位异或,在 SQL 中固定长度的二进制字符串(240 字节),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14290419/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com