[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Странная реализация boolean в Mysql
Страницы: 1, 2
DedMorozzz
Только что с толкнулся с непонятной ситуацией.
Имеется поле, с вариантами значений 0 и 1. Тип поля - TinyInt. Длина выставлена в соотв. с задачей - 1
И тут такой странный момент, не работает как надо скрипт, записи, там где 0, возвращают пустоту(нулл), хотя в БД, в структуре указанно "Not NULL".
Сперва подумал, что это бокай фреймворка, но при более детальном разборе, оказалось - дело в мускуле
Вот ссылка на ман http://dev.mysql.com/doc/refman/5.0/en/num...e-overview.html
Получается такой,на мой взгляд страный момент - что булеан, это синоним TinyInt(1)

Т.о. если нужен будет именно инт и указываете тип поля "тини инт" - делайте длину 2

PS: Этот описанный момент относится к фреймворку CakePhp. Тестировалось на версии 2.3.5
Вероятно ещё и на других фреймворках, но это не проверялось

_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
inpost
Я не совсем понял тебя. Может дело в версии? У меня tinyint(1) и нормально работают 1 и 0.
При select возвращают пустоту вместо 0 ?

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
glock18
DedMorozzz
tinyint(1) как бул работает нормально

вероятно, ошибка здесь:
Цитата (DedMorozzz @ 17.05.2013 - 09:41)
И тут такой странный момент, не работает как надо скрипт, записи, там где 0, возвращают пустоту(нулл), хотя в БД, в структуре указанно "Not NULL".


DedMorozzz
Цитата
При select возвращают пустоту вместо 0 ?

Возвращает false(в print_r - это пустота), вместо 0

Цитата
tinyint(1) как бул работает нормально

Я ж кинул ссылку на ман - это синоним, в этом то и "странность", указал интеджер, а возвращает булеан
Цитата
вероятно, ошибка здесь:

Вовсе нет, возвращается фактически фолс(в принт_р - пустота), но это стало понятно после того как стало ясно, что это булеан.
А до этого пустоту воспринял как НУЛЛ. После проверил "вар_дамп" - показал фолс

Т.о. в БД указан тип данных инт, но на выходе получил булеан. Увеличив длину до 2х, на выходе стал получать то что и ожадал изначально - инт

_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
inpost
http://my.jetscreenshot.com/demo/20130517-ij2l-4kb
http://my.jetscreenshot.com/demo/20130517-l5ca-11kb - print_r
http://my.jetscreenshot.com/demo/20130517-hoss-10kb - var_dump

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
glock18
Цитата (DedMorozzz @ 17.05.2013 - 10:47)
Цитата
При select возвращают пустоту вместо 0 ?

Возвращает false(в print_r - это пустота), вместо 0

Цитата
tinyint(1) как бул работает нормально

Я ж кинул ссылку на ман - это синоним, в этом то и "странность", указал интеджер, а возвращает булеан
Цитата
вероятно, ошибка здесь:

Вовсе нет, возвращается фактически фолс(в принт_р - пустота), но это стало понятно после того как стало ясно, что это булеан.
А до этого пустоту воспринял как НУЛЛ. После проверил "вар_дамп" - показал фолс

Т.о. в БД указан тип данных инт, но на выходе получил булеан. Увеличив длину до 2х, на выходе стал получать то что и ожадал изначально - инт

Хм, да, есть такой баг. Любопытно, что никогда вставал боком, хотя tinyint(1) использую везде. мб в версии mysql дело
DedMorozzz
inpost
https://dl.dropboxusercontent.com/u/6640402/bool_db.png
https://dl.dropboxusercontent.com/u/6640402/boolean.png
glock18, да в том то и дело, что решение не сразу "очевидное"
Версия мускула 5.1.68, но учитытвая, что этот момент описан в доке мускула, более чем вероятно, что версия тут непричём

_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
inpost
DedMorozzz
Если версия не при чём, почему тогда у меня нет этой "фичи"?

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
glock18
Цитата (DedMorozzz @ 17.05.2013 - 11:05)
Версия мускула 5.1.68, но учитытвая, что этот момент описан в доке мускула, более чем вероятно, что версия тут непричём


что же там описано то? MySQL даже такого типа данных как boolean не предлагает - это по сути и есть tinyint(1) = numeric. Про null в мане есть? Покажи
Oyeme
Цитата
These types are synonyms for TINYINT(1).

A value of zero is considered false. Nonzero values are considered true


В этом случи какая разница для Вас.
1 = true
Все остальное = false
DedMorozzz
Цитата
что же там описано то?

К примеру это

Цитата
BOOL, BOOLEAN
These types are synonyms for TINYINT(1)


_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
glock18
Цитата (DedMorozzz @ 17.05.2013 - 11:13)
Цитата
что же там описано то?

К примеру это

Цитата
BOOL, BOOLEAN
These types are synonyms for TINYINT(1)

пфф... как насчет ответить по существу?
glock18
скрины твои посмотрел - сразу видно, что используется какой-то ORM. возвращаясь к невысказанному мною вслух первоначальному предположению - ищи проблему в нем. в MySQL нет булева типа данных. Баста.
DedMorozzz
Цитата
пфф... как насчет ответить по существу?

Тяжко порой с тобой общаться
кидаю ссылку на ман, в котором описанно, что BOOLEAN это синоним от TINYINT(1)
без привязки к версии, а просто синоним и всё
Но при этом на выходе получаю не число, а логическую величину, всё равно говоришь версия важна. Да не важна она

А вот этот ответ меня более чем устраивает:
Цитата
сразу видно, что используется какой-то ORM

Если у инпоста возвращает 0-1, значит это действительно фреймворк(cakephp v 2.3.x) и тут тогда всё сходится.

_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
inpost
DedMorozzz
"всё равно говоришь версия важна. "
Ты кидаешь мануал на mysql5.0 , а мануал в 5.5 уже отличается от 5.0, к примеру, и 5.2 тоже.

Лично я тестировал без CMS, framework.
mysqli_connect, mysqli_query, и вывод.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.