FAQ по mysql

Redjik

Джедай-мастер
По ходу чтения книжек по mysql возникает ряд вопросов, порой тупых, но напрямую ответы на них в гугле я не могу найти.

Если никто не возражает, то я бы здесь собирал в кучу те вопросы, которые у меня появляются, с тем, чтобы в будущем, с вашей помощью составить полноценный faq.

Вопросы связанные с типом данных:

1) length - например tinyint(5) CREATE TABLE test (int_test TINYINT(5) UNSIGNED ZEROFILL)
при ZEROFILL добавляются нули, если ZEROFILL опустить, то судя по книге добавляются пробелы.
Вопрос - зачем, для чего использовать M без аттрибута ZEROFILL?

2) DECIMAL - хранится как строка.
Как его тогда обрабатывает mysql при выборках? Делает CAST 0_o? Что происходит, если столбец с типом DECIMAL индексирован?

На эти вопросы Explain мне не ответил.
 

С.

Продвинутый новичок
1) Есть экономические приложения/стандарты, в которых не положено оставлять пустоту в знакоместах.

2) DECIMAL обрабатывается как INT. Точка (не десятичная, риторическая).
 

флоппик

promotor fidei
Команда форума
Партнер клуба
судя по книге добавляются пробелы.
Книжка-врунишка.

Вопрос - зачем, для чего использовать?
Индексы почтовые хранить. Или артикулы. Или номера накладных. Хлам, на самом деле, такое обычно делают в приложении.

DECIMAL - обрабатывается как строка.
Книжка-устаришка.
Values for DECIMAL columns in MySQL 5.1 are stored using a binary format that packs nine decimal digits into 4 bytes.
 

С.

Продвинутый новичок
И как же обрабатывается (не хранится!) DECIMAL?
 

Redjik

Джедай-мастер
Индексы почтовые хранить. Или артикулы. Или номера накладных. Хлам, на самом деле, такое обычно делают в приложении.
Это при ZEROFILL, и это я как раз понял, зачем это нужно в других случаях, когда нет ZEROFILL, ибо если число превышает M, то M игнорируется.


Поправил, что DECIMAL хранится как строка, получается при операциях происходит CAST - не лучше ли тогда сразу во FLOAT хранить?
 

Redjik

Джедай-мастер
ну - у тебя сейчас стоит 2 символа - вставь 255 - результат будет 255
 

Redjik

Джедай-мастер
ну все верно, M игнорируется, на картинках то же самое.
 

Redjik

Джедай-мастер
Chushkin
поэтому я и пытаюсь все по полочкам разложить, скажи верный вариант.
 

Redjik

Джедай-мастер
Эм, ты видимо меня не совсем верно понял =)

tinyint - целое, всегда однобайтовое
число цифр в скобках, это число возвращаемых цифр в запросе (формат, фактически) (см. доку - M indicates the maximum display width for integer types.)
ZEROFILL - добавляет при выводе ведущие нули, типа "0005" и добавляет unsigned. (по сути, атрибут бесполезный и даже вредный в некоторых случаях)
Это все я знал, вопрос в том, на кой черт нужен M для int, без ZEROFILL, если он все равно игнорируется, tinyint был выбран просто для примера, плюс то, что ZEROFILL делает UNSIGNED я тоже уже вычитал =)

ЗЫ. сам виноват, не очевидно вопрос задал, сейчас поправлю в стартовом топике
 

Redjik

Джедай-мастер
Спасибо, когда появиться что-то новое из вопросов, апну тему.
 

Breeze

goshogun
Команда форума
Партнер клуба
а всего-то надо почитать секцию data types в мануале
 

Breeze

goshogun
Команда форума
Партнер клуба
For example, a column specified as SMALLINT(3) has the usual SMALLINT range of -32768 to 32767, and values outside the range permitted by three digits are displayed in full using more than three digits.

начиная с 5.0
Values for DECIMAL columns no longer are represented as strings that require 1 byte per digit or sign character. Instead, a binary format is used that packs nine decimal digits into 4 bytes.
 

Breeze

goshogun
Команда форума
Партнер клуба
ну правильно, эта часть и говорит, что М нафиг не нужно без зерофилл и указывать не обязательно =)
 
Сверху