[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: MySQL INSERT
te0203
Пытаюсь через консоль MySQLmyadmin вставить в таблицу запись

INSERT INTO `new_tovar` (`id`) VALUES ('2646101001');

Записывается id=2147483647

Даные по таблице:

CREATE TABLE IF NOT EXISTS `new_tovar` (
`id` int(10) NOT NULL,
`old_id` int(6) NOT NULL COMMENT 'Старый ID',
`name` varchar(50) NOT NULL,
.......
PRIMARY KEY (`id`),
KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Подскажите, пожалуйста, где я ошибся?
glock18
Цитата (te0203 @ 19.05.2013 - 08:11)
Записывается id=2147483647


ограничение в 4 байта на signed инт. переобъявите поле как unsigned int (это увеличит предел вдвое) или как (unsigned по желанию) bigint - аналог C'шного long int'а, то есть 8-байтовый инт, и это уже почти вдвое больше знаков
te0203
Спасибо за помощь.

Изменил таблицу так:

CREATE TABLE IF NOT EXISTS `new_tovar` (
`id` bigint(10) NOT NULL,
`old_id` int(6) NOT NULL COMMENT 'Старый ID',
`name` varchar(50) NOT NULL,
......
PRIMARY KEY (`id`),
KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Помогло.
SoMeOnE
te0203
Не обзательно было bigint ставить. Сказали же просто можно изменить signed на unsigned. Вообще для уникального ключа это всегда стоит делать, особенно если он инкрементируемый. Не нужны же тебе отрицательные значения.

Ты лучше здесь посмотри по диапазонам, что тебя больше устраивает

http://exec.h1.ru/docs/mysql1.shtml
http://www.mysql.ru/docs/man/Column_types.html
te0203
Не сразу понял где искать unsigned, он в атрибутах, а я его в типах искал.

CREATE TABLE IF NOT EXISTS `new_tovar` (
`id` int(10) unsigned NOT NULL,
`old_id` int(6) NOT NULL COMMENT 'Старый ID',
`name` varchar(50) NOT NULL,
....
PRIMARY KEY (`id`),
KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Вот так вроде...
glock18
Цитата (SoMeOnE @ 19.05.2013 - 09:03)
te0203
Не обзательно было bigint ставить. Сказали же просто можно изменить signed на unsigned. Вообще для уникального ключа это всегда стоит делать, особенно если он инкрементируемый. Не нужны же тебе отрицательные значения.

Ты лучше здесь посмотри по диапазонам, что тебя больше устраивает

http://exec.h1.ru/docs/mysql1.shtml
http://www.mysql.ru/docs/man/Column_types.html

а инкремента то там и нет wink.gif bigint ничем не хуже, на самом деле, ну и мало ли - мб там id могут быть больше лимита unsigned int. unsigned тем не менее резонный атрибут для любого численного поля, у которого не должно быть отрицательных значений.

Однако! te0203, вы оставили размер колонки в 10 символов. Для bigint это несколько нелепое ограничение.

Совет: для целочисленных колонок вообще можно задавать тип без длины, и достаточно просто определиться с размером числа (tinyint, smallint, int, bigint), ну и разве что исключение для булева - tinyint(1). Если указать длину, число меньше места в базе занимать не станет, так что навара никакого от этого нет, но придется следить за длинами, чтобы расхождений типов у внешних ключей не было для применимости индексов.
glock18
Цитата (te0203 @ 19.05.2013 - 09:31)
`id` int(10) unsigned NOT NULL,

`id` unsigned int(10) NOT NULL,
te0203
Ограничение (10) для исключения ввода числа с 11 символами.
glock18
Цитата (te0203 @ 19.05.2013 - 09:50)
Ограничение (10) для исключения ввода числа с 11 символами.

ммм... ну я в курсе вообще то. а нужно это ограничение на таблице в бд? я крепко сомневаюсь
SoMeOnE
Цитата (glock18 @ 19.05.2013 - 09:34)
а инкремента то там и нет wink.gif bigint ничем не хуже, на самом деле, ну и мало ли - мб там id могут быть больше лимита unsigned int.

насчет икремента не заметил. Но думаю он должен его поставить)
Из за того, что id может быть больше, я и дал ссылку на диапазон значений, что бы он сам выбрал, что ему больше подходит)
te0203
Инкремент специально не ставил, так как id выставляется вручную. Диапазон положительные цифры 10 символов.
SoMeOnE
Цитата (te0203 @ 19.05.2013 - 10:32)
Инкремент специально не ставил, так как id выставляется вручную. Диапазон положительные цифры 10 символов.

Советую специально поставить) А то поле которое вручную заполняется под другим именем держать.
Быстрый ответ:

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