首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL数据精度混淆

MySQL数据精度混淆
EN

Database Administration用户
提问于 2017-08-29 00:42:22
回答 1查看 285关注 0票数 1

我有两张列相同的桌子。

第一表:

代码语言:javascript
复制
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)  

第二表:

代码语言:javascript
复制
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数据库时,精度是相同的。

代码语言:javascript
复制
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');

结果是。

代码语言:javascript
复制
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表中显示的结果?谢谢。

EN

回答 1

Database Administration用户

回答已采纳

发布于 2017-08-29 01:50:13

NUMBER_PRECISION是无用的,除了一个案例:ZEROFILL。否则,它将指示需要多少列的输出才能显示最大的数字。

INT UNSIGNED需要10位数。INT SIGNED需要11列--一个符号(如果是负的)和10位数字。

忽略那里的列。当您看到int(11)时,忽略它。

也不要将列声明为INT(100)INT(2);它仍然是一个32位(4字节)有符号二进制数字。

票数 4
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/184543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档