sql >> Databasteknik >  >> RDS >> Mysql

Vad betyder parametern TINYINT(parameter)?

Datamässigt, tinyint(1) , tinyint(2) , tinyint(3) etc. är alla exakt likadana. De är alla i intervallet -128 till 127 för SIGNED eller 0-255 för UNSIGNED . Som andra svar noterade är siffran inom parentes bara ett tips om visningsbredd.

Du kanske vill notera att applikationsmässigt saker kan se annorlunda ut. Här, tinyint(1) kan få en speciell betydelse. Till exempel behandlar Connector/J (Java-anslutningen) tinyint(1) som ett booleskt värde, och istället för att returnera ett numeriskt resultat till applikationen konverterar den värden till true och false . detta kan ändras via tinyInt1isBit=false anslutningsparameter.

En tinyint(1) kan hålla siffror i intervallet -128 till 127, på grund av att datatypen är 8 bitar (1 byte) - uppenbarligen kan en osignerad tinyint hålla värden 0-255.

Det kommer tyst att trunkera värden utanför intervallet:

mysql> create table a
    -> (
    ->    ttt tinyint(1)
    -> );
Query OK, 0 rows affected (0.01 sec)

mysql> insert into a values ( 127 );
Query OK, 1 row affected (0.00 sec)

mysql> insert into a values ( -128 );
Query OK, 1 row affected (0.00 sec)

mysql> insert into a values ( 128 );
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> insert into a values ( -129 );
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select * from a;
+------+
| ttt  |
+------+
|  127 |
| -128 |
|  127 |
| -128 |
+------+
4 rows in set (0.00 sec)

mysql>

... om du inte ändrar sql_mode eller ändra serverkonfigurationen:

mysql> set sql_mode=STRICT_ALL_TABLES;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into a values ( -129 );
ERROR 1264 (22003): Out of range value for column 'ttt' at row 1
mysql>

Värdet som används i DDL för datatypen (t.ex.:tinyint(1)) är, som du misstänkte, visningsbredden. Det är dock valfritt och kunderna behöver inte använda det. Standard MySQL-klienten använder det till exempel inte.

https://dev.mysql .com/doc/refman/5.1/en/integer-types.html

https://dev .mysql.com/doc/refman/5.0/en/numeric-type-overview.html

MySql:Tinyint (2) ) vs tinyint(1) - vad är skillnaden?



  1. Hur man kaskader fortsätter med JPA/EclipseLink

  2. PostgreSQL felaktig sortering

  3. Hur förhindrar jag att den här frågan skriver ut samma resultat två gånger?

  4. 10 ovanliga Microsoft Access 2019-tips