768 до 32 767, либо (если указано свойство UNSIGNED) от 0 до 65 535.
• MEDIUMINT.
Целое число в диапазоне либо от -8 388 608 до 8 388 607, либо (если указано свойство UNSIGNED) от 0 до 16 777 215.
• INT или INTEGER.
Целое число в диапазоне либо от -2 147 483 648 до 2 147 483 647, либо (если указано свойство UNSIGNED) от 0 до 4 294 967 295.
• BIGINT.
Целое число в диапазоне либо от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807, либо (если указано свойство UNSIGNED) от 0 до 18 446 744 073 70 9 551 615.
• SERIAL.
Синоним выражения BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE (большое целое число без знака, принимающее автоматически увеличиваемые уникальные значения; значения NULL запрещены). Используется для автоматической генерации уникальных значений в столбце первичного ключа. Описание свойств UNSIGNED и AUTO_INCREMENT вы найдете в этом подразделе, а свойств NOT NULL и UNIQUE – в пункте «Свойства столбцов».
Примечание
Для всех целочисленных типов данных, кроме BOOL (BOOLEAN) и SERIAL, можно в скобках указать количество отображаемых цифр, которое используется совместно с параметром ZEROFILL: если число содержит меньшее количество цифр, то при выводе оно дополняется слева нулями. Например, если столбец таблицы определен как INT(5) ZEROFILL, то значения «1234567» и «12345» отображаются «как есть», а значение «123» – как «00123». Для типа данных BIT в скобках указывается размер числа, то есть максимальное количество хранимых битов.
• FLOAT.
Число с плавающей точкой в диапазоне от -3,40282346638 до -1,175494351-38 и от 1,175494351-38 до 3,40282346638 (а также значение 0) с точностью около 7 значащих цифр (точность зависит от возможностей вашего компьютера).
• DOUBLE, DOUBLE PRECISION или REAL.
Число с плавающей точкой в диапазоне от -1,7976931348623157308 до -2,2250738585072014-308 и от 2,2250738585072014-308 до 1,797693134862315738 (а также значение 0) с точностью около 15 значащих цифр (точность зависит от возможностей вашего компьютера).
• FLOAT(<Точность>).
При значении точности от 0 до 24 этот тип данных эквивалентен типу FLOAT, при значении от 25 до 53 – типу DOUBLE.
• DECIMAL, DEC, NUMERIC или FIXED.
Точное (неокругляемое) число с фиксированной точкой. Может содержать до 65 значащих цифр и до 30 цифр после десятичного разделителя (по умолчанию – 10 значащих цифр и 0 после десятичного разделителя).
Примечан ие
Для всех десятичных (нецелочисленных) типов данных, кроме FLOAT (<Точность>), можно в скобках указать точность и шкалу, то есть максимальное количество хранимых значащих цифр и максимальное количество хранимых цифр после десятичного разделителя. Например, если для столбца задан тип данных FLOAT(7,5), это означает, что в столбец нельзя добавить значение с более чем двумя (2 = 7–5) цифрами в целой части и все введенные значения будут округляться до 5 знаков после десятичного разделителя. Для чисел с плавающей точкой можно указать точность до 255 и шкалу до 30, однако указывать слишком большую точность и шкалу не имеет смысла, так как в базе данных сохраняются приближенные значения, которые совпадают с реальными лишь в первых 7 (для типа FLOAT) или 15 (для типа DOUBLE) значащих цифрах, последующие цифры при сохранении могут быть искажены. Для чисел с фиксированной точкой можно указать точность до 65 и шкалу до 30. Если точность и шкала не указаны, то они равны, соответственно, 10 и 0. При сохранении чисел с фиксированной точкой искажений не происходит.
Завершая рассмотрение числовых типов данных, обсудим три свойства, которые можно указать для числовых столбцов:
• UNSIGNED – данное свойство означает, что в столбце запрещены отрицательные (со знаком «-») значения. Указывать это свойство можно для любых столбцов с числовым типом данных, кроме BIT, BOOL (BOOLEAN) и SERIAL. Для целочисленных столбцов при добавлении свойства UNSIGNED максимально допустимое значение столбца увеличивается вдвое.
• ZEROFILL – данное свойство означает, что значения при отображении будут дополнены нулями. Целые числа дополняются нулями слева в соответствии с указанным количеством отображаемых цифр, десятичные – слева и справа в соответствии с указанными точностью и шкалой. Например, если столбец определен как DOUBLE(10,5) ZEROFILL, то значение «12.23» отображается как «0012.23000». Кроме того, данное свойство запрещает отрицательные значения, как и свойство UNSIGNED. Указывать свойство ZEROFILL можно для любых столбцов с числовым типом данных, кроме BIT, BOOL (BOOLEAN) и SERIAL.
• AUTO_INCREMENT – данное свойство обеспечивает автоматическую нумерацию строк таблицы. Это означает, что при добавлении в столбец неопределенного (NULL) или нулевого значения оно автоматически заменяется следующим номером, на единицу больше предыдущего (нумерация по умолчанию начинается с единицы, установить другой начальный номер можно с помощью соответствующего свойства таблицы). Указывать это свойство можно для любых столбцов с числовым типом данных, кроме BIT и DECIMAL (DEC, NUMERIC, FIXED). В таблице может быть только один столбец с таким свойством, и для него должен быть создан ключ или индекс (об этом вы узнаете в пункте «Ключевые столбцы и индексы»).
Далее рассмотрим типы данных, используемые при хранении даты и времени.
Для столбца, который будет содержать дату и/или время, вы можете использовать один из следующих типов данных.
• DATE.
Дата в формате «YYYY-MM-DD», в диапазоне от «0000-01-01» до «9999-12-31».
• DATETIME.
Дата и время в формате «YYYY-MM-DD HH:MM:SS» в диапазоне от «0000–0101 00:00:00» до «9999-12-31 23:59:59».
• TIMESTAMP.
Отметка времени в формате «YYYY-MM-DD HH:MM:SS» в диапазоне от «1970-01-01 00:00:00» до некоторой даты в 2038 г. При добавлении или изменении строки таблицы в столбце с типом TIMESTAMP автоматически устанавливается дата и время выполнения операции (если значение этого столбца не указано явно или указано неопределенное значение). Если нужно, чтобы отметка времени проставлялась только при добавлении строки, после слова TIMESTAMP добавим свойство DEFAULT CURRENT_TIMESTAMP.
Если в таблице есть несколько столбцов с типом TIMESTAMP, отметка времени автоматически проставляется только в первом из них. Если необходимо также вносить отметку времени в какой-либо из последующих столбцов с типом TIMESTAMP, то при добавлении/изменении строки укажем для этого столбца значение NULL, которое будет автоматически заменено текущей датой.
• TIME.
Время в формате «HH:MM:SS» в диапазоне от «- 838:59:59» до «838:59:59».
• YEAR, YEAR(2), YEAR(4).
Год в формате «YYYY» или «YY» (если количество цифр не указано, используется формат «YYYY»). Диапазон значений – от 1901 до 2155, если используется формат «YYYY», или от 70 (соответствует 1970 г.) до 69 (соответствует 2069 г.), если используется формат «YY».
Отмечу, что MySQL воспринимает даты не только в указанном выше формате. Вы можете ввести дату с любым знаком препинания в качестве разделителя, например 2007@12@31 23%59%59, или без разделителя, например 20071231235959. Более того, если в столбец с типом даты или времени вносится символьное или числовое значение в одном из таких форматов, MySQL автоматически преобразует это значение в дату и/или время.
Завершая изучение типов данных, рассмотрим символьные типы.
Столбцам, которые будут содержать текст, можно присвоить один из следующих типов данных.
• CHAR(<Количество символов>) или NATIONAL CHAR (<Количество символов>).
Символьная строка фиксированной длины. В таком столбце всегда хранится указанное количество символов, при необходимости значение дополняется справа пробелами. Вы можете задать количество символов от 0 до 255. Если количество символов не задано, используется длина строки по умолчанию – 1 символ.
Тип данных NATIONAL CHAR отличается от CHAR тем, что для столбцов с типом NATIONAL CHAR используется кодировка UTF-8, в то время как для столбцов с типом CHAR можно указать любую кодировку, поддерживаемую MySQL.
• VARCHAR(<Максимальное количество символов>) или NATIONAL VARCHAR(<Максимальное количество символов>).
Символьная строка переменной длины, содержащая не более указанного количества символов. Вы можете указать максимальное количество символов от 0 до 65 535, но не более 65 535 байтов в сумме для всех столбцов таблицы с типом CHAR, VARCHAR, BINARY или VARBINARY. Таким образом, если во всей таблице вы используете однобайтовую кодировку (где каждому символу соответствует 1 байт, например кодировку KOI8-R, CP-866 или CP-1251), то суммарное количество символов, указанное при описании этих столбцов, не должно превышать 65 535. Если же вы используете кодировку UTF-8 (для которой сервер MySQL выделяет до 3 байтов на символ), то суммарное количество символов, указанное при описании этих столбцов, не должно превышать 21 844 (в три раза меньше, чем для однобайтовых кодировок).
Тип данных NATIONAL VARCHAR отличается от VARCHAR тем, что для