我在數據庫中存儲了一個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
我不認爲每個服務器上的按位操作都是標準化的。你最好先得到一個適用於當前數據庫的工具。 –