说明

只是TEXT和SELECT两个东西相关的问题,并不是两者之间的关系。

TEXT

TEXT类型,大文本类型,细分起来还有BIGTEXT,TINYTEXT等;

总体而言,就是处理mysql中存储大文本的一种数据类型。

先上结论:慎用,少用,即使用也要限制好,控制性能。

Innodb的存储结构

  • 从大到小是:表空间-段-区-页/块-行
  • 磁盘管理的最小单位是页;
  • 数据存放是按行来存放的,即存储引擎是面向行的;
  • 页的大小固定为16kb,且不能更改;
  • 由于innodb存储引擎表为索引组织表,树底层的叶子节点为一双向链表,因此每个页中至少应该有两行记录,这就决定了innodb在存储一行数据的时候不能够超过8k(8098字节)

TEXT和BLOB

使用这种大数据类型,如果值比较大,InnoDB会使用专门的“外部”存储区域来进行存储;

行内仅使用1-4个字节存储一个指针。

取用的时候同理,会创建临时表;

若临时表太大,超过设定值,则会存储在磁盘上,性能会有较大下降;


SELECT打印输出

SELECT something

可以作为mysql的输出语句,遇到问题可以去查看下;

下面说下遇到的问题:

问题描述

SELECT id,interaction_type,reply_type
FROM chat_log
WHERE status=0
AND interaction_type IN ('a')
AND reply_type IN ('c' OR 'd')

在条件中,in的括号中,错误的把,写成了OR;

正常运行中,发现查出的结果并不是想要的;

跟踪之后,发现mybatis没有报错,但是sql中确实写成了or;

问题解决和探究

解决很简单,就改成,即可

SELECT id,interaction_type,reply_type
FROM chat_log
WHERE status=0
AND interaction_type IN ('a')
AND reply_type IN ('c' , 'd')

但为什么之前的写法可以运行呢?

用select看下条件

SELECT ('c' OR 'd')
//结果为0

有了or,尝试下and

SELECT ('c' AND 'd')
//结果为0

有了String,尝试下其他的

SELECT ('c' AND 1) //结果为0
SELECT ('0' AND '1') //结果为0
SELECT (0 OR '1') //结果为1

可以初步判定,条件中是一个表达式,且是逻辑运算的/位运算的;

下面就又有问题了,原来有问题的语句其实等价于

SELECT id,interaction_type,reply_type
FROM chat_log
WHERE status=0
AND interaction_type IN ('a')
AND reply_type IN (0)
ORDER BY created_date DESC SELECT id,interaction_type,reply_type
FROM chat_log
WHERE status=0
AND interaction_type IN ('a')
AND reply_type = 0
ORDER BY created_date DESC

运行之后,结果表明一致。

改成1,尝试下,发现什么都查不出来;

改成FALSE,尝试结果表明,和0一样;

改写语句

SELECT COUNT(*)
FROM chat_log
WHERE reply_type = FALSE

会得到全表数据量,true则为空

初步猜测结论:

  • varchar 是否为true,是看varchar是否为bit类型

但具体是为啥,还是没搞清楚,希望各位大佬指点


参考文章

【技术累积】【点】【sql】【15】MySQL的TEXT和SELECT问题的更多相关文章

  1. 《[MySQL技术内幕:SQL编程》读书笔记

    <[MySQL技术内幕:SQL编程>读书笔记 2019年3月31日23:12:11 严禁转载!!! <MySQL技术内幕:SQL编程>这本书是我比较喜欢的一位国内作者姜承尧, ...

  2. 技术分享|SQL和 NoSQL数据库之间的差异:MySQL(VS)MongoDB

    在当今市场上,存在各种类型的数据库,选择适合你业务类型的数据库对应用的开发和维护有着重要意义.本篇文章,将为大家分享SQL和NoSQL语言之间的区别,同时还将比较这两种类型的数据库,以帮助小伙伴们选择 ...

  3. 一次故障解决过程梳理:mysql varchar text timestamp

    CHAR 类型的一个变体是 VARCHAR 类型,char(M),M是指字节长度,和varchar(M)一样 故障原因:mysql主键设置为int(9),但数据量已经大于int(9)的范围了 tips ...

  4. SQL之mysql常用操作语句(入门级)

    1.进入数据库: mysql -u root -p mysql -h localhost -u root -p database_name 2.列出数据库 show databases; 3.选择数据 ...

  5. 常用SQL操作(MySQL或PostgreSQL)与相关数据库概念

    本文对常用数据库操作及相关基本概念进行总结:MySQL和PostgreSQL对SQL的支持有所不同,大部分SQL操作还是一样的. 选择要用的数据库(MySQL):use database_name; ...

  6. Mysql 中 text类型和 blog类型的异同

    MySQL存在text和blob: (1)相同 在TEXT或BLOB列的存储或检索过程中,不存在大小写转换,当未运行在严格模式时,如果你为BLOB或TEXT列分配一个超过该列类型的最大长度的值值,值被 ...

  7. 全国省市级联数据sql语句 mysql版

    全国省市级联数据sql语句 mysql版 --省级 provincial create table provincial ( provincialID int, provincialName ), p ...

  8. MySQL中TEXT与BLOB字段类型的区别

    这篇文章主要介绍了MySQL中TEXT与BLOB字段类型的区别,本文总结了6大区别,需要的朋友可以参考下   在MySQL中有两个字段类型容易让人感觉混淆,那就是TEXT与BLOB,特别是自己写博客程 ...

  9. Mysql的Text和Blob的比较

    MySQL存在text和blob: (1)相同 在TEXT或BLOB列的存储或检索过程中,不存在大小写转换,当未运行在严格模式时,如果你为BLOB或TEXT列分配一个超过该列类型的最大长度的值,值被截 ...

随机推荐

  1. vue 根据网站路由判断页面主题色

    需求: 不同品牌对应不同版本配色 做法: 根据域名带的参数判断进入哪个品牌,对应哪个版本 在main.js中 import Vue from 'vue' import App from './App' ...

  2. xth 的玫瑰花(codevs 1360)

    题目描述 Description 这天是rabbit 的生日前夕,Xth 来到花店,要给他的rabbit 买玫瑰花,为了保证质 量,他跟花店老板——小菜儿同学要求自己到花田采摘.小菜儿灰常希望早日见到 ...

  3. CPU工作原理简图

  4. 洛谷 P1586 四方定理

    P1586 四方定理 题目描述 四方定理是众所周知的:任意一个正整数nn,可以分解为不超过四个整数的平方和.例如:25=1^{2}+2^{2}+2^{2}+4^{2}25=1​2​​+2​2​​+2​ ...

  5. RPC服务框架探索之Thrift

    前言架构服务化后,需要实现一套方便调用各服务的框架,现在开源如日中天,优先会寻找开源实现,如果没有合适自家公司业务的,才会考虑从零开发,尤其是一切以KPI为准绳的公司,谁会跟钱过不去?N个月之前,公司 ...

  6. [转]十五天精通WCF——第十一天 如何对wcf进行全程监控

    说点题外话,我们在玩asp.net的时候,都知道有一个叼毛玩意叫做“生命周期”,我们可以用httpmodule在先于页面的page_load中 做一些拦截,这样做的好处有很多,比如记录日志,参数过滤, ...

  7. [ javascript ] getElementsByClassName与className和getAttribute!

    对于javascript中的getElementsByClassName 在IE 6/7/8 不支持问题. 那么须要模拟出getElementsByClassName  须要採用className属性 ...

  8. ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) C. Molly's Chemicals

    感觉自己做有关区间的题目方面的思维异常的差...有时简单题都搞半天还完全没思路,,然后别人提示下立马就明白了...=_= 题意:给一个含有n个元素的数组和k,问存在多少个区间的和值为k的次方数. 题解 ...

  9. 升级DM5校验

    1,将某个文件生成带DM5的文件,使用srec_cat工具: read A   #原始文件 srec_cat $A -o 要生成的文件名称  -Line_Length 46 -Address_Leng ...

  10. Ural 1353 Milliard Vasya&#39;s Function(DP)

    题目地址:Ural 1353 定义dp[i][j].表示当前位数为i位时,各位数和为j的个数. 对于第i位数来说.总能够看成在前i-1位后面加上一个0~9.所以状态转移方程就非常easy出来了: dp ...