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、执行结果 一…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...
【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
