关于MySQL数据库的数据类型发生隐形转换的问题咨询

网友的问题:

1.MySQL对于int类型索引使用问题,如:tb中有主键id,普通索引tid,在执行SQL:select * from tb where id = 2 order by id 时,
extra为空,这里的id值没带引号,如果带上引号extra也为空。

2.当 select * from tb where tid = 2 order by tid,tid为普通索引,这时tid的值带引号和不带引号就会有区别,带引号时extra会提示额外的排序,不带引号时extra为空,这是怎么一回事?
zhdba

mysqlops的回答:

1.当字段类型为:INT;

MySQL数据库之布尔类型、枚举类型和集合类型的应用场景详解

【导读

MySQL数据库四种数据类型:布尔类型、微整型、枚举类型和集合类型,都逐一分析这四种数据类型的特性,以及针对每种数据类型做相应的深入分析和案例测试,挖掘出MySQL手册没有详细写清楚的部分,相关技术文章可以考虑从数据类型系列第一篇文章MySQL数据库数据类型之ENUM、SET、BOOL/BOOLEAN、TINYINT特性介绍开始阅读。

本文内容属于基于在此之前分享的6篇关于四种数据类型的文章之上,我们结合实际的业务场景和生产环境维护成本等多个角度进行分析,阐述什么样的业务场景,适合使用布尔类型、枚举类型和集合类型?使用这三种数据类型之后,又回给我们带来哪些麻烦?如何规避这三种数据类型带来的弊端等问题,将会逐一解答。

(1).     布尔类型

MySQL数据库之集合类型SET的DDL变更测试总结

 导读

针对四种数据类型:布尔类型BOOL或称布尔类型BOOLEAN、微整型TINYTINT、枚举类型ENUM、集合类型SET,我们已经分多篇文章篇幅给出详细的介绍与功能测试数据,接下来我们深入介绍枚举类型EUNM和集合类型SET。测试基于InnoDB存储引擎上,对MySQL数据库集合类型SET的字段进行DDL变更操作,是否需要重新创建表呢?对数据库的事务处理有何影响?对数据库的数据服务提供有何性能影响?

(一)   系统环境

硬件:DELL R510  10块盘做的RAID5,上面跑了几十个虚拟机

操作系统:CentOS release 5.5 (Final)

MySQL数据库:5.5.15-log

InnoDB存储引擎:plugin-InnoDB 1.1.8

(二)   测试数据准备

MySQL数据库之枚举数据类型ENUM的DDL变更测试

导读

针对四种数据类型:布尔类型BOOL或称布尔类型BOOLEAN、微整型TINYTINT、枚举类型ENUM、集合类型SET,我们已经分多篇文章篇幅给出详细的介绍与功能测试数据,接下来我们深入介绍枚举类型EUNM和集合类型SET。测试基于InnoDB存储引擎上,对MySQL数据库枚举类型ENUM的字段进行DDL变更操作,是否需要重新创建表呢?对数据库的事务处理有何影响?对数据库的数据服务提供有何性能影响?

(一)   系统环境

硬件:DELL R510  10块盘做的RAID5,上面跑了几十个虚拟机

操作系统:CentOS release 5.5 (Final)

MySQL数据库:5.5.15-log

InnoDB存储引擎:plugin-InnoDB 1.1.8

MySQL数据库之数据类型集合类型和枚举类型测试环境

导读

针对四种数据类型:布尔类型BOOL或称布尔类型BOOLEAN、微整型TINYTINT、枚举类型ENUM、集合类型SET,我们已经分多篇文章篇幅给出详细的介绍与功能测试数据,接下来我们深入介绍枚举类型EUNM和集合类型SET。测试基于InnoDB存储引擎上,对MySQL数据库集合类型SET和枚举类型ENUM的字段进行DDL变更操作,是否需要重新创建表呢?对数据库的事务处理有何影响?对数据库的数据服务提供有何性能影响?

(一)   系统环境

硬件:DELL R510  10块盘做的RAID5,上面跑了几十台虚拟机

操作系统:CentOS release 5.5 (Final)

MySQL数据库:5.5.15-log

InnoDB存储引擎:plugin-InnoDB 1.1.8

(二)   测试数据准备

1>.创建表结构的SQL命令

MySQL数据库数据类型之集合类型SET测试总结

导读

MySQL数据库提供针对字符串存储的一种特殊数据类型:集合类型SET,这种数据类型可以给予我们更多提高性能、降低存储容量和降低程序代码理解的技巧,前面介绍了首先介绍了四种数据类型的特性总结,其后又分别介绍了布尔类型BOOL或称布尔类型BOOLEAN、枚举类型ENUM,本文我们详细介绍集合类型set测试过程与总结,加深对mysql数据库集合类型set的理解记忆。

集合类型 SET

a).数据库表mysqlops_set结构

执行创建数据库表mysqlops_set的语句:

root@localhost : test 05:06:13> CREATE TABLE Mysqlops_SET(ID INT NOT NULL AUTO_INCREMENT,

    ->                            Work_Option  SET('','DBA','SA','Coding Engineer','JavaScript','NA','QA','other') NOT NULL,

    ->                            Work_City    SET('shanghai','beijing','hangzhou','shenzhen','guangzhou','other') NOT NULL DEFAULT 'shanghai',

    ->                            PRIMARY KEY(ID)

    ->                            )ENGINE=InnoDB CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';

Query OK, 0 rows affected (0.00 sec)

MySQL数据库数据类型之枚举类型ENUM测试总结

导读

MySQL数据库提供针对字符串存储的一种特殊数据类型:枚举类型ENUM,这种数据类型可以给予我们更多提高性能、降低存储容量和降低程序代码理解的技巧,前面介绍了首先介绍了四种数据类型的特性总结,其后又分别介绍了布尔类型BOOL或称布尔类型BOOLEAN,以及后续会再单独介绍集合类型SET,本文我们详细介绍集合类型enum测试过程与总结,加深对mysql数据库集合类型enum的理解记忆。

枚举类型ENUM

a).数据库表mysqlops_enum结构

执行数据库表mysqlops_enum创建的SQL语句:

root@localhost : test 11:22:29> CREATE TABLE Mysqlops_enum(ID INT NOT NULL AUTO_INCREMENT,

    ->                            Job_type    ENUM('DBA','SA','Coding Engineer','JavaScript','NA','QA','','other') NOT NULL,

    ->                            Work_City ENUM('shanghai','beijing','hangzhou','shenzhen','guangzhou','other') NOT NULL DEFAULT 'shanghai',

    ->                            PRIMARY KEY(ID)

    ->                            )ENGINE=InnoDB CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';

Query OK, 0 rows affected (0.00 sec)