SQLite3数据类型
存储类与数据类型
- NULL
- INTEGER
有符号整数类型,存储为0,1,2,3,4,6或8个字节,取决于值的大小。 - REAL
浮点类型,存储为8字节的IEEE浮点数。 - TEXT
文本类型,将使用数据库指定的编码格式存储(UTF-8,UTF-16BE,UTF-16LE) - BLOB
用于存储数据原始形式
存储类型(storage class)比数据类型(Datatype)更加泛化。比如INTEGER代表7种不同长度的整数类型,在存储时会有一些区别,但是一旦读到内存中时,都会被转换为8字节符号整数。所以大多数情况下这两个概念不好区分,可以相互使用。
Boolean类型
没有单独的boolean类型,可以使用整数类型存0或1代替。3.23.0版本支持关键字TRUE和FALSE,被自动转换为1和0。
日期和时间类型
没有单独的日期/时间类型,可以以使用以下三个类型替代:
- TEXT
可存储为ISO8601格式的字符串(“YYYY-MM-DD HH:MM:SS.SSS”) - REAL
可存储为儒略历日数,根据预言的公历,格林威治时间从公元前4714年11月24日中午开始的天数。 - INTEGER
可存储为Unix时间,从UTC时间1970-01-01 00:00:00开始的秒数。
亲和类型
为了最大化兼容其它数据库引擎,为一个列增加亲和关系(Affinity)属性,用以表示该列推荐的存储类型。推荐不是强制,仍然可以存储其它类型。在SQLITE3中每一列都会被分配其中一个亲和类型:
-
TEXT
存储数据时使用NULL,TEXT,BLOB存储类。插入数值类型时会被转换为TEXT类型。 -
NUMERIC
插入文本时,自动转换为INTEGER或REAL(文本格式符合特定要求时)。如果是INTEGER文本但数值超过8字节有符号整数,则转换为REAL类型(仅文本前15个十进制数字视为有效内容)。无法转换为数值时使用TEXT存储,十六进制格式的整数文本被视为普通文本。如果一个浮点数可无损转换为整数,则会被转换为整数存储。NULL和BLOB不做转换,直接以其类型存储。指数表示形式的浮点数如果能无损转换为整数,则会被转换为整数存储。'3.0e+5’将被转换为300000。 -
INTEGER
与NUMERIC几乎相同,区别在于转换为NUMERIC时,浮点数将保留小数点后的0。例如插入数据为“4.0”,对于INTEGER亲和类型,CAST(4.0 as INT)得到结果为4,CAST(4.0 as NUMERIC)得到结果为4.0。 -
REAL
与NUMERIC几乎相同,区别在于INTEGER会被强制转换为浮点类型。内部优化机制会将一个没有小数部分的较小的浮点数转换为整数再进行存储以节省存储空间,重新读取再转换为浮点数。 -
BLOB
该类型不会发生数据转换。
如何确定列的亲和类型?
未使用STRICT关键字定义表时,列的亲和类型由其定义时指定的类型决定:
- 声明类型包含"INT"字符串时,分配INTEGER。
- 声明类型包含"CHAR",“CLOB”,"TEXT"时分配TEXT。
- 声明类型包含"BLOB"时,分配BLOB。
- 声明类型包含"REAL",“FLOA”,"DOUB"时分配REAL。
- 其它情况分配NUMERIC。
表达式的亲和类型
- IN、NOT IN运算符的右操作数据如果是一个列表,则不具有亲和性,但如果是一个SELECT语句,则其亲和性与返回结果集相同。
- 如果表达式指向一个真实表(非VIEW或子查询)列的引用,则亲和性与列相同。
- 形如"CAST(expr AS type)"的表达式,亲和性与type相同。
- COLLATE运算符的亲和性与左操作数据相同。
比较运算符
“=”
“==”
“<”
“<=”
“>”
“>=”
“!=”
“IN”
“NOT IN”
“BETWEEN”
“IS”
“IS NOT”
排序规则
- NULL类型的值比其它任何类型的值都小,比一个其它NULL类型的值小。
- INTEGER或REAL类型的值小于TEXT或BLOB类型的值。
- TEXT类型的值小于BLOB类型的值。
- BLOB类型的值相互比较时,使用memcmp方法的计算结果。
比较前的类型转换
比较INTEGER、REAL、TEXT存储类型的两个值之前可能会发生类型转换,取决于操作数的亲和关系。
数值类型可以转换为TEXT,TEXT可以在格式正确的情况下转换为数值(不包含十六进制格式)。BLOB只是简单解释为文本字符串并以数据库当前的编码进行文本比较。
- 如果其一操作数有INTEGER、REAL或NUMERIC亲和类型,而另一操作数有TEXT或BLOB或无亲和类型,则后者应用NUMERIC亲和类型。
- 如果其一操作数有TEXT亲和类型而另一操作数无亲和类型,则后者应用TEXT亲和类型。
- 其它情况则按操作数自有类型比较。
算术运算符
+, -, *, /,%,<<,>>,&,|
两边运算符被解释为数值。STRING或BLOB自动转换为REAL或INTEGER。
STRING或BLOB描述一个实数时(有小数点或指数),或其描述的整数超过8字节有符号整数时,将被转换为REAL,否则转换为INTEGER。
部分运算符要求操作数是整数,则REAL类型通过CAST to INTEGER转换为整数。
NULL类型参与运算的结果仍是NULL,操作数无法转换为数值类型且不是NULL时,转换为0或0.0。 除以0返回一个NULL类型。
排序,分组,SELECT组合查询
查询结果通过ORDER BY排序时,最先出现的时NULL类型,然后时INTEGER和REAL类型,接着是TEXT类型,最后是BLOB类型。
group by子句用于分组的值如果存储类型不同则会放到不同的组。例外情况是对于INTEGER或REAL存储类型,只要数值相同即在同一组。
UNION、INTERSECT和EXCEPT组合的SELECT查询会在值比较时隐式转换类型,并且不会应用亲和类型。
排序序列
比较两个字符串时使用排序序列或排序方法进行比较。
- BINARY
使用memcmp进行比较 - NOCASE
使用strnicmp进行比较,不会进行完整的UTF大小写转换,即仅有26个ASCII字母被转换为小写进行比较。 - RTRIM
与BINARY相似,只是将字符串末尾的空格去掉再比较。
开发者可以通过sqlite3_create_collation()注册自己的排序函数。
指定排序函数
每个表的每一列都有一个关联的排序函数,默认为BINARY。在定义列时通过COLLATE子句可以指定其它排序函数。
以下规则用于确定对于二进制比较运算符 (=, <, >, <=, >=, !=, IS, and IS NOT)使用哪一个排序函数:
- 任何一个操作数有通过COLLATE显式分配的排序函数时,直接使用,优先于左操作数的排序函数。
- 如果有一个操作数是列,则列的排序函数优先于左操作数的排序函数。
- 其它情况使用BINARY。
原文链接:https://www.sqlite.org/datatype3.html
相关文章:

SQLite3数据类型
存储类与数据类型 NULLINTEGER 有符号整数类型,存储为0,1,2,3,4,6或8个字节,取决于值的大小。REAL 浮点类型,存储为8字节的IEEE浮点数。TEXT 文本类型,将使用数据库指定的编码格式存储(UTF-8,UTF-16BE,UTF-16LE)BLOB …...

K8S:K8S对外服务之Ingress
文章目录 一.Ingress基础介绍1.Ingress概念2.K8S对外暴露服务(service)主要方式(1)NodePort(2)LoadBalancer(3)externalIPs(4)Ingress 3.Ingress 组成&#x…...

flask入门
第一个Flask项目 创建后项目如下图 static存放静态文件,templates存放Jinja2模板,app.py是整个项目的入口文件 我们略微理解下app.py这里的代码 # 从flask这个包中导入Flask类 from flask import Flask#使用Flask类创建一个app对象 #__name__:代表当前…...

掌动智能:性能测试工具优势有哪些
由于应用程序的性能直接影响用户体验和满意度。而性能问题可能会导致应用响应缓慢、崩溃或无法处理大量用户请求。为了确保应用程序的高性能和可靠性,开发团队需要对应用程序进行性能测试。性能测试工具能够模拟真实场景下的负载并监测应用程序的性能表现࿰…...

实现一个简单的线性回归和多项式回归(2)
对于多项式回归,可以同样使用前面线性回归中定义的LinearRegression算子、训练函数train、均方误差函数mean_squared_error,生成数据集create_toy_data,这里就不多做赘述咯~ 拟合的函数为 def sin(x):y torch.sin(2 * math.pi * x)return y1.数据集的建…...

云原生Kubernetes:K8S集群kubectl命令汇总
目录 一、理论 1.概念 2. kubectl 帮助方法 3.kubectl 子命令使用分类 4.使用kubectl 命令的必要环境 5.kubectl 详细命令 一、理论 1.概念 kubectl是一个命令行工具,通过跟 K8S 集群的 API Server 通信,来执行集群的管理工作。 kubectl命令是操…...

Java使用模板导出word、pdf
使用deepoove根据模板导出word文档,包括文本、表格、图表、图片,使用WordConvertPdf可将word文档转换为pdf导出 模板样例: 导出结果: 一、引入相关依赖 <!-- 工具类--><dependency><groupId>cn.hutool&…...

速通Redis基础(二):掌握Redis的哈希类型和命令
目录 Redis 哈希类型简介 Redis 哈希命令 HSET HGET HEXISTS HDEL HKEYS HVALS HGETALL HMGET HLEN HSETNX 编辑 HINCRBY HINCRBYFLOAT Redis的哈希类型命令小结 Redis 是一种高性能的键值存储数据库,支持多种数据类型,其中之…...

WebDAV之π-Disk派盘 + 书藏家
书藏家是一款书籍收藏的软件,对于喜欢阅读书籍的用户来说非常友好,记录你所阅读的书籍内容,对你所阅读的书籍内容进行全方位的管理,并且支持多种录入的方式,不管是实体书籍还是网络书籍都能够进行更为有效的管理;内置WebDAV 模块,更加便利的整理自己的文件资源;书藏家的…...

香港Web3.0生态现状
目前香港Web3.0生态正在快速发展。香港政府和金融机构正在积极推动Web3.0生态的建设,以推动数字经济和智慧城市的发展。香港政府已经发布了有关虚拟资产发展的政策宣言,鼓励和监管并重,加大力度推动虚拟资产产业向前发展。同时,香…...

LLMs之BELLE:源码解读(sft_train.py文件)
LLMs之BELLE:源码解读(sft_train.py文件) 目录 源码解读(sft_train.py文件) # 1、解析命令行参数,包括模型参数、数据参数和训练参数。...

【UE5 Cesium】17-Cesium for Unreal 建立飞行跟踪器(2)
目录 效果 步骤 一、飞机沿航线飞行 二、通过切换相机实现在不同角度观察飞机飞行 效果 步骤 一、飞机沿航线飞行 先去模型网站下载一个波音737飞机模型 然后将下载好的模型导入到UE项目中,导入时需要勾选“合并网格体”(导入前最好在建模软件中将…...

【ElasticSearch】基于 Java 客户端 RestClient 实现对 ElasticSearch 索引库、文档的增删改查操作,以及文档的批量导入
文章目录 前言一、对 Java RestClient 的认识1.1 什么是 RestClient1.2 RestClient 核心类:RestHighLevelClient 二、使用 Java RestClient 操作索引库2.1 根据数据库表编写创建 ES 索引的 DSL 语句2.2 初始化 Java RestClient2.2.1 在 Spring Boot 项目中引入 Rest…...

【Node.js】stream 流模块
流是一种抽象的数据结构。从键盘输入到应用程序就是标准输入流(stdin)。应用程序把字符一个一个输出到显示器上叫做:标准输出流(stdout)。 流的特点是数据是有序的,而且必须依次读取,或者依次写…...

【LeetCode】——链式二叉树经典OJ题详解
主页点击直达:个人主页 我的小仓库:代码仓库 C语言偷着笑:C语言专栏 数据结构挨打小记:初阶数据结构专栏 Linux被操作记:Linux专栏 LeetCode刷题掉发记:LeetCode刷题 算法头疼记:算法专栏…...

代码注释对于程序员重要吗?
程序员对代码注释可以说是又爱又恨又双标……你是怎么看待程序员不写注释这一事件的呢? 代码注释的重要性 代码注释是指在程序代码中添加的解释性说明,用于描述代码的功能、目的、使用方法等。代码注释对于程序的重要性主要体现在以下几个方面&#x…...

OpenHamony开发笔记一:在HarmonyOS虚拟机上运行openharmony工程
在HarmonyOS的虚拟机上要运行openharmony的工程时需要修改的地方有 1.修改build-profile.json5,将runtimeOS改为HarmonyOS "targets": [{"name": "default","runtimeOS": "HarmonyOS"}, 2.修改工程引用的SDK&a…...

C++程序员入门需要怎么学?(InsCode AI 创作助手)
文章目录 (一)学习C概念(二)C主要应用场景和相关产品(三)学习C流程1. 学习C语法和基本示例:2. 深入学习面向对象编程(OOP):3. 使用C标准库:4. 解决…...

Intel 高性能库之IPP信号处理简介及下载(版本5.1,含32位和64位及注册)
IPP是什么 IPP:Intel Integrated Performance Primitives 英特尔集成性能基元(英特尔IPP)是一款多核就绪的扩展函数库,其中包含众多针对多媒体、数据处理和通信应用高度优化的软件函数。它包括: 视频编码:用于 DV25/50/100、MPEG-2、MPEG-4、H.263 和 MPEG-4 Part 10 …...

【C++】运算符重载案例 - 字符串类 ② ( 重载 等号 = 运算符 | 重载 数组下标 [] 操作符 | 完整代码示例 )
文章目录 一、重载 等号 运算符1、等号 运算符 与 拷贝构造函数2、重载 等号 运算符 - 右操作数为 String 对象3、不同的右操作数对应的 重载运算符函数 二、重载 下标 [] 运算符三、完整代码示例1、String.h 类头文件2、String.cpp 类实现3、Test.cpp 测试类4、执行结果 一…...

Vue脚手架开发流程
一、项目运行时会先执行 public / index.html 文件 <!DOCTYPE html> <html lang""><head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport&quo…...

从零开始学习线性回归:理论、实践与PyTorch实现
文章目录 🥦介绍🥦基本知识🥦代码实现🥦完整代码🥦总结 🥦介绍 线性回归是统计学和机器学习中最简单而强大的算法之一,用于建模和预测连续性数值输出与输入特征之间的关系。本博客将深入探讨线性…...

[LeetCode]链式二叉树相关题目(c语言实现)
文章目录 LeetCode965. 单值二叉树LeetCode100. 相同的树LeetCode101. 对称二叉树LeetCode144. 二叉树的前序遍历LeetCode94. 二叉树的中序遍历LeetCode145. 二叉树的后序遍历LeetCode572. 另一棵树的子树 LeetCode965. 单值二叉树 题目 Oj链接 思路 一棵树的所有值都是一个…...

集成学习
集成学习(Ensemble Learning) - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/27689464集成学习就是组合这里的多个弱监督模型以期得到一个更好更全面的强监督模型,集成学习潜在的思想是即便某一个弱分类器得到了错误的预测,其他的弱分类器…...

算法练习11——买卖股票的最佳时机 II
LeetCode 122 买卖股票的最佳时机 II 给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。 在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。 返回…...

linux——多线程,线程控制
目录 一.POSIX线程库 二.线程创建 1.创建线程接口 2.查看线程 3.多线程的健壮性问题 4.线程函数参数传递 5.线程id和地址空间 三.线程终止 1.pthread_exit 2.pthread_cancel 四.线程等待 五.线程分离 一.POSIX线程库 站在内核的角度,OS只有轻量级进程…...

Oracle 简介与 Docker Compose部署
最近,我翻阅了在之前公司工作时的笔记,偶然发现了一些有关数据库的记录。当初,我们的项目一开始采用的是 Oracle 数据库,但随着项目需求的变化,我们不得不转向使用 SQL Server。值得一提的是,公司之前采用的…...

mp4音视频分离技术
文章目录 问题描述一、分离MP3二、分离无声音的MP4三、结果 问题描述 MP4视频想拆分成一个MP3音频和一个无声音的MP4文件 一、分离MP3 ffmpeg -i C:\Users\Administrator\Desktop\一个文件夹\我在财神殿里长跪不起_完整版MV.mp4 -vn C:\Users\Administrator\Desktop\一个文件…...

JVM 参数
JVM 参数类型大致分为以下几类: 标准参数(-):保证在所有的 JVM 实现都支持的参数非标准参数(-X):通用的,特定于 HotSpot 虚拟机的参数,这些参数不保证在所有 JVM 实现中…...

黑马点评-07缓存击穿问题(热点key失效)及解决方案,互斥锁和设置逻辑过期时间
缓存击穿问题(热点key失效) 缓存击穿问题也叫热点Key问题,就是一个被高并发访问并且重建缓存业务较复杂的key突然失效了,此时无数的请求访问会在瞬间打到数据库,带来巨大的冲击 一件秒杀中的商品的key突然失效了,由于大家都在疯狂抢购那么这个瞬间就会有无数的请求…...