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、执行结果 一…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...

蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...