mysql妙用bit儲存資訊

2021-06-25 17:27:48 字數 515 閱讀 6616

做遊戲要儲存使用者經過城市列表,我想用varchar型別存,大自然提出用位元存資訊的好辦法,這樣一來,我比原來就減少了至少一半的mysql網路請求開銷,同時也讓mysql的空間節省了許多。

比如,我要標記第三個城市的為已經訪問過,我更新bit資料的sql語句是這樣的(用到了位操作的與、或、移位):

update `characters` set `visited_cities` = visited_cities | (1<<2) where `characters`.`id` = 1 and (visited_cities & (1<<2)) = 0;
從cities表找到對應的city:

select t1.* from cities as t1, characters as t2 where (1<<(t1.id-1))&t2.visited_cities!=0

上面的visited_cities欄位是bigint(64位)

真是很方便。

陣列模擬bit儲存

使用陣列來模擬位運算,對於取值只為0,1兩種的判斷,乙個bool型別要占用乙個byte,而位運算只占用乙個bit,是bool的1 8。以下是判斷乙個string中的字元是否完全不同,演算法1是普通解法,演算法2為使用陣列模擬位儲存的解法。紅色部分為關鍵 include include using n...

關於mysql資料庫儲存bit型別資料的問題

一 今天在專案中儲存表單資料,其中有乙個是checkbox,後台解析為true或false 當然,我們在儲存到資料庫的時候也可以儲存為true或false。二 其實mysq資料庫中有乙個型別叫bit是可以用來應對這種情況的 具體為 bit 1 長度自定義,我這裡用的是 bit 1 三 資料儲存問題 ...

Redis妙用 儲存使用者token

在設計類似電商的系統時,乙個常見的需求是每個頁面都需要攜帶登入使用者資訊。常見的解決方法有兩種 使用cookie儲存 使用jwt儲存。但如果系統中使用了redis快取,那麼還可以有第三種解決方案 將使用者token快取在redis中。一 登陸時生成乙個token存入redis 生成乙個token物件...