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关键字定义表时,列的亲和类型由其定义时指定的类型决定:

  1. 声明类型包含"INT"字符串时,分配INTEGER。
  2. 声明类型包含"CHAR",“CLOB”,"TEXT"时分配TEXT。
  3. 声明类型包含"BLOB"时,分配BLOB。
  4. 声明类型包含"REAL",“FLOA”,"DOUB"时分配REAL。
  5. 其它情况分配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)使用哪一个排序函数:

  1. 任何一个操作数有通过COLLATE显式分配的排序函数时,直接使用,优先于左操作数的排序函数。
  2. 如果有一个操作数是列,则列的排序函数优先于左操作数的排序函数。
  3. 其它情况使用BINARY。

原文链接:https://www.sqlite.org/datatype3.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/96668.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

轻量级接口自动化测试框架

大致思路: jmeter完成接口脚本,Ant完成脚本执行并收集结果生成报告,最后利用jenkins完成脚本的自动集成运行. 环境安装: 1.jdk1.7 配置环境变量(参考前面的分页) 2.jmeter解压到本地,ant解压到本地 3.Ant解压到本地,并配置环境变量 ANT_HOME:D:\jmeter\apache-ant-1.9.6 P…

助力电力行业数字化转型:智慧风电项目介绍

智慧电力作为电力领域的突破性进展&#xff0c;旨在实现能源领域的数字化转型。智慧电力借助数字孪生、IOT、云计算等技术&#xff0c;将传统的电力系统升级为高智能、高效能的系统&#xff0c;助力传统能源企业实现数字化转型。下面让我们来看一看山海鲸可视化提供的智慧电力相…

C# GraphicsPath 类学习

先在窗体放2个picturebox&#xff0c; 然后看一下如下代码&#xff1b; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; us…

数据交换的常见格式,如JSON格式和XML格式

JSON 数据交换的格式 JSON的全称是JavaScript Object Notation(JavaScript标记对象), JSON的体积小是一种轻量级的数据交换格式 JSON和XML都是非常标准的数据交换格式 XML是一种国际上通用的数据交换格式, 体积大解析难度大并且语法严格&#xff08;一般和钱有关系的&#…

物流仓储RFID系统设计案例分享

一、项目背景 为了实现仓储货物管理数字化转型的目标&#xff0c;提升仓储业务自动化和数字化水平&#xff0c;在满足仓储日常需求的基础上&#xff0c;验证物联网和人工智能相关技术能力&#xff0c;为仓储业务的柔性自动化、快速部署和复制提供储备能力。 项目设计目标包括…

2023/9/28 -- ARM

【内存读写指令】 int *p0X12345678 *p100;//向内存中写入数据 int a *p;//从内存读取 1.单寄存器内存读写指令 1.1 指令码以及功能 向内存中写&#xff1a; str:向内存中写一个字(4字节)的数据 strh:向内存写半个字&#xff08;2字节&#xff09;的数据 strb:向内存写一个字…

关于crypto1_bs

代码地址 GitHub - aczid/crypto1_bs: Bitsliced Crypto-1 brute-forcer Bitsliced Crypto-1 暴力破解器 使用位切片方法的 Crypto-1 密码的纯 C(99) 实现&#xff0c;它使用 GNU 向量扩展来跨 SSE/AVX/AVX2 支持架构移植&#xff0c;同时提供尽可能高的并行性。 背景 我写这篇…

asp.net core 如何统一json序列化格式

oldconfig.AllFields Newtonsoft.Json.JsonConvert.SerializeObject(sqlParameters.AllFields);在start.cs文件中 JsonConvert.DefaultSettings new Func<JsonSerializerSettings>(() >{JsonSerializerSettings jsonsetting new JsonSerializerSettings(){Formatt…

布隆过滤器及其用法

1 定义 布隆过滤器(Bloom Filter, BF)是由Howrad Bloom在1970年提出的一种具有高效时间和空间效率的二进制向量数据结构&#xff0c;用来检测一个元素是不是属于这个集合。注意&#xff0c;布隆过滤器只判断是否出现在集合中&#xff0c;无法给出元素在集合中的具体位置。 1.1…

HubSpot成功全靠它?集客营销大揭秘

在当今数字化的商业世界中&#xff0c;吸引、转化和维护客户已经变得更具挑战性和复杂性。然而&#xff0c;有一家公司已经成功地帮助数千家企业实现了集客营销的成功。这家公司就是HubSpot。那么&#xff0c;HubSpot的成功到底全靠了什么&#xff1f;让我们揭开集客营销的大秘…

openGauss学习笔记-92 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用MOT SQL覆盖和限制

文章目录 openGauss学习笔记-92 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用MOT SQL覆盖和限制92.1 不支持的特性92.2 MOT限制92.3 不支持的DDL操作92.4 不支持的数据类型92.5 不支持的索引DDL和索引92.6 不支持的DML92.7 不支持的JIT功能&#xff08;…

3D孪生场景搭建:3D漫游

上一篇 文章介绍了如何使用 NSDT 编辑器 制作模拟仿真应用场景&#xff0c;今天这篇文章将介绍如何使用NSDT 编辑器 设置3D漫游。 1、什么是3D漫游 3D漫游是指基于3D技术&#xff0c;将用户带入一个虚拟的三维环境中&#xff0c;通过交互式的手段&#xff0c;让用户可以自由地…

前端作业(17)

之后的20个作业&#xff0c;学自【20个JavaScript经典案例-哔哩哔哩】 https://b23.tv/kVj1P5f 支付倒计时 1. 支付10s倒计时 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compat…

跨境必备!WhatsApp营销——注册、养号、防封号!

前面的文章&#xff0c;我们给大家介绍了WhatsApp营销的定义以及重要性&#xff0c;相信许多跨境小伙伴已经摩拳擦掌&#xff0c;迫不及待讲WhatsApp纳入您的全渠道营销策略。当然&#xff0c;工欲善其事&#xff0c;必先利其器&#xff0c;拥有安全的WhatsApp号与登录环境会让…

【网络安全 --- kali2022安装】kali2022 超详细的安装教程(提供镜像)

如果你还没有安装vmware 虚拟机&#xff0c;请参考下面博客安装 【网络安全 --- 工具安装】VMware 16.0 详细安装过程&#xff08;提供资源&#xff09;-CSDN博客【网络安全 --- 工具安装】VMware 16.0 详细安装过程&#xff08;提供资源&#xff09;https://blog.csdn.net/m0…

【gcc】RtpTransportControllerSend学习笔记 3:gcc

本文是大神 https://www.cnblogs.com/ishen 的文章的学习笔记。大神的webrtc源码分析(8)-拥塞控制(上)-码率预估 详尽而具体,堪称神作。本文使用的代码是m79 ,与大神有不同。2.4 Probe只会在一些特殊的时候才会进行探测(链路刚开始时, 码率不正常暴跌时)2.5 : 对发送的吞吐量…

Cocos Creator3.8 项目实战(四)巧用九宫格图像拉伸

一、为什么要使用九宫格图像拉伸 相信做过前端的同学都知道&#xff0c;ui &#xff08;图片&#xff09;资源对包体大小和内存都有非常直接的影响。 通常ui 资源都是图片&#xff0c;也是最占资源量的资源类型&#xff0c;游戏中的ui 资源还是人机交互的最重要的部分&#xff…

解决 Jenkins 性能缓慢的问题~转

解决 Jenkins 性能缓慢的问题 Docker中文社区 ​​ 计算机技术与软件专业技术资格持证人 2 人赞同了该文章 没有什么比缓慢的持续集成系统更令人沮丧的了。它减慢了反馈循环并阻止代码快速投入生产。虽然像使用性能更好的服务器可以为您争取时间&#xff0c;但您最终必须投资…

UG\NX CAM二次开发 获取当前加工导航器选中的对象数量和tag UF_UI_ONT_ask_selected_nodes

文章作者:代工 来源网站:NX CAM二次开发专栏 简介: UG\NX CAM二次开发 获取当前加工导航器选中的对象数量和tag UF_UI_ONT_ask_selected_nodes 效果: 代码: void MyClass::do_it() {//获取当前加工导航器选中的对象数量和TAGint count = 0;tag_t* objects = NULL…

stm32 - 中断

stm32 - 中断 概念中断向量表NVIC 嵌套中断向量控制器优先级 中断EXTI概念基本结构例子- 对射式红外传感器计次例子 - 旋转编码器 概念 stm32 支持的中断资源&#xff08;都属于外设&#xff09; EXTITIMADCUSARtSPII2C stm32支持的中断 内核中断 外设中断 中断通道与优先级 一…