У меня есть следующие данные в таблице MySQLПочему MySQL BIT_OR() возвращает значение, отличное операции PHP побитового
"Data Dump" 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
@Mike, вы можете оставить его как есть, так как решение работает. Я бы, скорее всего, сохранил целочисленный тип, а не строку, поскольку операции будут иметь тенденцию быть быстрее, по крайней мере, с обычными базами данных. Так ли это для MySQL, я не знаю. Если это, как я помню, хранит все как строки в любом случае, разница может быть не такой. В любом случае, первая команда оптимизации - это «измерение, не угадай», а второе - «проверить свои полномочия, не доверяйте случайным блокам Интернета только потому, что они звучат хорошо» :-) – paxdiablo