我在数据库中存储了一个240字节(1920位)的二进制字符串(但是我想保持数据库独立)。按位异或,SQL中的固定长度二进制字符串(240字节)
我需要做到以下几点:
UPDATE `my_table` SET `data` = `data`^'new_data' WHERE `id` = 'field_id'
我相信SQL语法逐位异或只适用于值高达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秒由于尺寸的不同而产生的值。这个选项是不合理的。
有没有人知道一个数据库独立的方式来实现这一目标?
您可以避免突出显示的数据一致性问题的一种方法是在事务中执行读取/计算/更新。 – PeterJ
我不认为每个服务器上的按位操作都是标准化的。你最好先得到一个适用于当前数据库的工具。 –