Mysql

MySQL數據精度混淆

  • August 30, 2017

我有兩個具有相同列的表。

第一張表:

DESC orders;
Field           Type       Null Key      Default    Extra
order_id        int(8)     unsigned      zerofill   NO  PRI (null)auto_increment
customer_id     int(10)    unsigned      YES        MUL (null)  

第二張表:

DESC items;
Field            Type      Null Key      Default    Extra
item_id          int(11)   unsigned      NO PRI (null)  auto_increment
order_id         int(10)   unsigned      NO PRI (null)  

基於上面的表 order_id 有不同的數據精度。

但是在檢查 information_schema 數據庫時,精度是相同的

SELECT c.TABLE_SCHEMA, c.TABLE_NAME, c.COLUMN_NAME, c.DATA_TYPE, c.NUMERIC_PRECISION, t.ENGINE from information_schema.COLUMNS c
INNER JOIN information_schema.TABLES t on t.TABLE_NAME = c.TABLE_NAME
WHERE c.TABLE_SCHEMA = 'database' AND c.COLUMN_NAME = 'order_id' and c.TABLE_NAME in ('orders','items');

結果是。

TABLE_SCHEMA    TABLE_NAME  COLUMN_NAME DATA_TYPE   NUMERIC_PRECISION   ENGINE
database         items      order_id    int         10                  MyISAM
database         orders     order_id    int         10                  MyISAM

其中哪一個是準確的?資訊模式結果的DESC表中顯示的那個?謝謝你。

NUMBER_PRECISION除了一種情況外是無用的: ZEROFILL. 否則,它表示需要多少列輸出才能顯示最大數字。

INT UNSIGNED需要10位數。 INT SIGNED需要 11 列 - 一個符號(如果為負)和 10 位數字。

忽略那裡的列。看到時忽略它int(11)

並且不要費心將列聲明為INT(100)or INT(2); 它仍然是一個 32 位(4 字節)有符號二進制數。

引用自:https://dba.stackexchange.com/questions/184543