我有两个具有相同列的表。
第一张表:
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)
orINT(2)
;它仍然是一个 32 位(4 字节)有符号二进制数。