2016-03-21 5 views
0

Я читал так много сообщений SO, но я не понял.Число рядом с типом данных в mysql

Я создал временную таблицу, чтобы проверить мои сомнения.

create table ids(id int(1)); 

Я привык думать, что если я указываю int(1), то я могу хранить только 0-9. Поэтому я попробовал следующее:

insert into ids(id) values(100000); 

Это работает !! Затем я начал поиск, чтобы понять число. Во всех постах я читал, что число рядом с типом данных означает width. Я до сих пор не получил термин width in mysql. Имеют ли они значение размер? Если да, размер в байтах ?.

И если я хочу достичь того, что я думал, что я должен изменить в своем запросе? или должен ли я ограничивать это из своего php-кода?

Означает ли эта ширина одинаковый для всех типов данных?

+1

INT (11) означает, что независимо от того, вы хотите, чтобы целое число отображалось не более, с 11 цифрами. Поэтому, если вы храните целое число, превышающее 11 цифр, оно будет отображаться только так, как если бы оно имело 11 цифр, но его фактическое значение будет сохранено. – 1000111

+0

@ 1000111 Спасибо. Вы очистили мое первое основное сомнение. Пожалуйста, дайте мне знать, могу ли я ограничить длину при вставке? –

+0

№ При вводе целочисленного значения, если значение находится в пределах диапазона «INTEGER», тогда фактическое значение будет сохранено в базе данных. Это свойство длины работает при выборе, как я сказал в своем предыдущем комментарии. @GopsAB – 1000111

ответ

0

Руководство по этому вопросу уже ясно.

Руководство:

http://dev.mysql.com/doc/refman/5.7/en/numeric-type-attributes.html

Ширина дисплея присутствует только в метаданных, используемых для приложений.

Ниже приведена демоверсия (длина для id равна 1 (int(1)), длина для id2 равна 11 (int)).

mysql> create table ids(id int(1), id2 int); 
insert into ids(id) values(100000); 
seQuery OK, 0 rows affected (0.00 sec) 

mysql> insert into ids(id) values(100000); 
lect iQuery OK, 1 row affected (0.00 sec) 

mysql> select id, id2 from ids; 
Field 1: `id` 
Catalog: `def` 
Database: `test` 
Table:  `ids` 
Org_table: `ids` 
Type:  LONG 
Collation: binary (63) 
Length:  1 
Max_length: 6 
Decimals: 0 
Flags:  NUM 

Field 2: `id2` 
Catalog: `def` 
Database: `test` 
Table:  `ids` 
Org_table: `ids` 
Type:  LONG 
Collation: binary (63) 
Length:  11 
Max_length: 0 
Decimals: 0 
Flags:  NUM 

+--------+------+ 
| id  | id2 | 
+--------+------+ 
| 100000 | NULL | 
+--------+------+ 
1 row in set (0.00 sec) 
+0

Хорошо. Как я могу достичь, если это будет означать длину при вставке? –

0

Вы можете указать данные/длина байта в полукокса/VARCHAR, но не Int типа как целого типа держать его длину по умолчанию/емкость в MySQL.

Пусть ИНТ всегда будет int(11) даже указать int(2) и сохранить его значение по умолчанию 4 bytes или -2,147,483,648 to +2,147,483,647 in case of signed и 0 to 4,294,967,295 in case of unsigned.

если вы хотите сохранить только макс. 127 целочисленное значение, то вы можете сохранить tinyint, и если до 255, тогда tinyint unsigned.

Или вы хотите выйти за его пределы, тогда есть smallint, mediumint, затем int, а затем bigint.

Смежные вопросы