我有一個MySQL表中的下列數據爲什麼MySQL的BIT_OR()被返回比PHP位運算不同值
「數據轉儲」 2 phone_calls 001 2 phone_calls 010 2 phone_calls 100個 2 phone_calls 1000 2 phone_calls 10000個 2 phone_calls 100000
如果我運行PHP代碼做位或操作,像這樣
echo bindec('001') | bindec('010') | bindec('100') | bindec('1000') | bindec('10000') | bindec('100000');
我得到63「預計」輸出
,如果我做或手動
000001
000010
000100
001000
010000
100000
======
111111
the result = 111111 which is `32 + 16 + 8 + 4 + 2 + 1 = 63`
當我在MySQL
SELECT user_id, section_name, BIT_OR(permission_type) AS final
FROM permissions
WHERE section_name ='phone_calls' and user_id = 2
GROUP BY user_id, section_name
運行下面的查詢其基本運行BIT_OR()上面列出的「數據轉儲」和輸出是
2 phone_calls 108543
爲什麼MySQL給我108543和PHP給我63?我怎樣才能讓MySQL給我63?
我明白了:)我會給你正確的答案。但我留下了下面的下一個人的答案:)非常感謝。我應該如何讓列類型進行狂熱轉換? – Jaylen 2014-12-03 01:31:03
@Mike,您可以保留它自解決方案以來的工作。我自己可能會存儲一個整數類型而不是字符串,因爲操作往往會更快,至少在常規數據庫中。不管這是MySQL的情況,我不知道。正如我似乎記得的那樣,如果它以任何方式將所有東西都存儲爲字符串,那麼差別可能不會那麼大。在任何情況下,第一條優化命令是「測量,不要猜測」,第二條是「檢查你的權限,不要僅僅因爲它們聽起來有知識而信任一些隨機的機器人」:-) – paxdiablo 2014-12-03 01:45:35