2016-03-21 3 views
0

Ich lese so viele SO-Beiträge noch habe ich nicht den Punkt bekommen.Nummer in der Nähe von Datentyp in Mysql

Ich habe eine temporäre Tabelle erstellt, um meine Zweifel zu testen.

create table ids(id int(1)); 

Früher habe ich zu denken, dass, wenn ich int(1) angeben, dann kann ich nur 0-9 speichern. Also habe ich folgendes versucht

insert into ids(id) values(100000); 

Es funktioniert !! Dann begann ich meine Suche, um die Nummer zu verstehen. In allen Posts, ich lese diese Zahl in der Nähe von Datentyp bedeutet width. Ich bekomme immer noch nicht den Begriff width in mysql. Bedeutet das Größe? Wenn ja, Größe in Bytes ?.

Und wenn ich erreichen will, was ich dachte, was sollte ich in meiner Abfrage ändern? oder Sollte ich das von meinem PHP-Code einschränken?

Bedeutet diese Breite für alle Datentypen gleich?

+1

INT (11) bedeutet, dass egal welche, die ganze Zahl mit 11 Ziffern angezeigt werden soll. Wenn Sie also eine Ganzzahl speichern, die größer als 11 Ziffern ist, wird sie nur so angezeigt, als hätte sie 11 Ziffern, aber ihr tatsächlicher Wert wird gespeichert. – 1000111

+0

@ 1000111 Danke. Du hast meine ersten grundsätzlichen Zweifel ausgeräumt. Bitte lassen Sie mich wissen, kann ich die Länge beim Einfügen begrenzen? –

+0

Nein. Beim Einfügen eines ganzzahligen Werts, wenn der Wert im Bereich von 'INTEGER' liegt, wird der tatsächliche Wert in der Datenbank gespeichert. Diese Längeneigenschaft funktioniert während der Auswahl wie in meinem vorherigen Kommentar. @GopsAB – 1000111

Antwort

0

Das Handbuch ist bereits klar hierüber.

Handbuch:

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

Die Anzeigebreite ist nur in den Metadaten, die für Anwendungen eingesetzt.

Das Folgende ist eine Demo dazu (Länge für ID ist 1 (int(1)); Länge für ID2 ist 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

Ok. Wie erreiche ich, dass es beim Einlegen Länge bedeutet? –

0

Sie können Daten/Byte Länge in char/varchar angeben, aber nicht Typ als int-Typ int halten die Standardlänge/Kapazität in mysql.

Angenommen int wird immer int(11) Sie selbst int(2) angeben und behalten den Standardwert 4 bytes oder -2,147,483,648 to +2,147,483,647 in case of signed und 0 to 4,294,967,295 in case of unsigned.

Wenn Sie nur max. 127 Integer-Wert, dann können Sie Tinyint behalten und wenn bis 255 dann Tinyint unsigned.

Oder Sie wollen darüber hinaus gehen dann gibt es smallint, mediumint dann int und dann bigint.