03.sqlite3学习——数据类型

目录

sqlite3学习——数据类型

SQL语句的功能

SQL语法

SQL命令

SQL数据类型

数字类型

整型

浮点型

定点型decimal

浮点型 VS decimal

日期类型

字符串类型

CHAR和VARCHAR

BLOB和TEXT

SQLite 数据类型

SQLite 存储类

SQLite 亲和类型(Affinity)及类型名称

Boolean 数据类型

Date 与 Time 数据类型


sqlite3学习——数据类型

SQL语句的功能

SQL语句的功能包括以下:

  • 数据定义(DDL):用户定义、删除和修改数据模式
  • 数据查询(DQL):用于查询数据
  • 数据操纵(DML):用于增、删、改数据
  • 数据控制(DCL):用于控制数据访问权限

SQL语法

SQL命令

SQL语句中关键字既可以小写也可以大写

SQL数据类型

数字类型

整型

浮点型

float(M,D),double(M、D)

  • D表示浮点型数据小数点之后的精度,假如超过D位则四舍五入,即1.233四舍五入为1.23,1.237四舍五入为1.24
  • M表示浮点型数据总共的位数,D=2则表示总共支持五位,即小数点前只支持三位数
drop table if exists test_float;
create table test_float (num float(5, 2)
) engine=innodb charset=utf8;insert into test_float values(1.233);
insert into test_float values(1.237);
insert into test_float values(10.233);
insert into test_float values(100.233);
insert into test_float values(1000.233);
insert into test_float values(10000.233);
insert into test_float values(100000.233);select * from test_float;

以上程序在MySQL中运行结果会报错,提示数据溢出(以下为SQLyog下运行结果):

但在SQLite3中运行不会提示错误,但实际已经发生溢出

首先创建一个数据库,类型为.db

执行上述程序,发现报错,这是因为sqlite中不支持engine=innodb charset=utf8;(显式进行引擎选择和编码选择)

删除engine=innodb charset=utf8;后运行

结果如下

定点型decimal

当数据精度很大的时候我们可以使用定点型

decimal在不指定M、D时默认为decimal(10, 0)

drop table if exists test_decimal;
create table test_decimal (float_num float(10, 2),double_num double(20, 2),decimal_num decimal(20, 2)
) ;insert into test_decimal values(1234567.66, 1234567899000000.66, 1234567899000000.66);
insert into test_decimal values(1234567.66, 12345678990000000.66, 12345678990000000.66);

浮点型 VS decimal

  • float、double类型存在精度丢失问题,即写入数据库的数据未必是插入数据库的数据
  • decimal无论写入数据中的数据是多少,都不会存在精度丢失问题,decimal类型常见于银行系统、互联网金融系统等对小数点后的数字比较敏感的系统中

日期类型

drop table if exists test_time;
create table test_time (date_value date,time_value time,year_value year,datetime_value datetime,timestamp_value timestamp
);insert into test_time values(now(), now(), now(), now(), now());

运行发现报错,这是因为now()是MySQL的内置函数

我们重新写一个

drop table if exists test_time;
create table test_time (date_value date,time_value time,year_value year,datetime_value datetime
);
insert into test_time values("2023-8-26","2:00","2023","2023-8-26 2:00");

运行成功:

字符串类型

CHAR和VARCHAR

  • char是固定长度字符串,其长度范围为0~255且与编码方式无关,无论字符实际长度是多少,都会按照指定长度存储,不够的用空格补足
  • varchar为可变长度字符串,在utf8编码的数据库中其长度范围为0~21844,如varchar(1024)表示字符串长度最长为1024
  • char实际占用的字节数即存储的字符所占用的字节数,varchar实际占用的字节数为存储的字符+1或+2或+3
  • MySQL处理char类型数据时会将结尾的所有空格处理掉而varchar类型数据则不会
DROP TABLE IF EXISTS test_string;
CREATE TABLE test_string (char_value CHAR(5),varchar_value VARCHAR(5)
);INSERT INTO test_string VALUES('a', 'a');
INSERT INTO test_string VALUES(' a', ' a');
INSERT INTO test_string VALUES('a ', 'a ');
INSERT INTO test_string VALUES(' a ', ' a ');SELECT LENGTH(char_value), LENGTH(varchar_value) FROM test_string;

BLOB和TEXT

text和blob两种数据类型,它们的设计初衷是为了存储大数据使用的

MySql单行最大数据量为64K

当varchar(M)的M大于某些数值时,varchar会自动转为text:

  • M>255时转为tinytext
  • M>500时转为text
  • M>20000时转为mediumtext

SQLite 数据类型

一般数据采用固定的静态数据类型, 而 SQLite 采用的是动态数据类型, 会根据存入值自动判断,这样做是为了和标准的SQL语句相兼容。

SQLite 数据类型是一个用来指定任何对象的数据类型的属性。SQLite 中的每一列,每个变量和表达式都有相关的数据类型。

可以在创建表的同时使用这些数据类型。SQLite 使用一个更普遍的动态类型系统。在 SQLite 中,值的数据类型与值本身是相关的,而不是与它的容器相关。

SQLite 存储类

每个存储在 SQLite 数据库中的值都具有以下存储类之一:

存储类

描述

NULL

值是一个 NULL 值。

INTEGER

值是一个带符号的整数,根据值的大小存储在 1、2、3、4、6 或 8 字节中。

REAL

值是一个浮点值,存储为 8 字节的 IEEE 浮点数字。

TEXT

值是一个文本字符串,使用数据库编码(UTF-8、UTF-16BE 或 UTF-16LE)存储。

BLOB

值是一个 blob 数据,完全根据它的输入存储。

SQLite 的存储类稍微比数据类型更普遍。INTEGER 存储类,例如,包含 6 种不同的不同长度的整数数据类型。

SQLite 亲和类型(Affinity)及类型名称

下表列出了当创建 SQLite3 表时可使用的各种数据类型名称,同时也显示了相应的亲和类型:

数据类型

亲和类型

  • INT
  • INTEGER
  • TINYINT
  • SMALLINT
  • MEDIUMINT
  • BIGINT
  • UNSIGNED BIG INT
  • INT2
  • INT8

INTEGER

  • CHARACTER(20)
  • VARCHAR(255)
  • VARYING CHARACTER(255)
  • NCHAR(55)
  • NATIVE CHARACTER(70)
  • NVARCHAR(100)
  • TEXT
  • CLOB

TEXT

  • BLOB
  • 未指定类型

BLOB

  • REAL
  • DOUBLE
  • DOUBLE PRECISION
  • FLOAT

REAL

  • NUMERIC
  • DECIMAL(10,5)
  • BOOLEAN
  • DATE
  • DATETIME

NUMERIC

Boolean 数据类型

SQLite 没有单独的 Boolean 存储类。相反,布尔值被存储为整数 0(false)和 1(true)。

Date 与 Time 数据类型

SQLite 没有一个单独的用于存储日期和/或时间的存储类,但 SQLite 能够把日期和时间存储为 TEXT、REAL 或 INTEGER 值。

存储类

日期格式

TEXT

格式为 "YYYY-MM-DD HH:MM:SS.SSS" 的日期。

REAL

从公元前 4714 年 11 月 24 日格林尼治时间的正午开始算起的天数。

INTEGER

从 1970-01-01 00:00:00 UTC 算起的秒数。

对于时间的使用在实际开发中比较常见,我们需要好好掌握。

SQLite 支持以下五个日期和时间函数:

序号

函数

实例

1

date(timestring, modifier, modifier, ...)

以 YYYY-MM-DD 格式返回日期。

2

time(timestring, modifier, modifier, ...)

以 HH:MM:SS 格式返回时间。

3

datetime(timestring, modifier, modifier, ...)

以 YYYY-MM-DD HH:MM:SS 格式返回。

4

julianday(timestring, modifier, modifier, ...)

这将返回从格林尼治时间的公元前 4714 年 11 月 24 日正午算起的天数。

5

strftime(format, timestring, modifier, modifier, ...)

这将根据第一个参数指定的格式字符串返回格式化的日期。具体格式见下边讲解。

上述五个日期和时间函数把时间字符串作为参数。时间字符串后跟零个或多个 modifier 修饰符。strftime() 函数也可以把格式字符串 format 作为其第一个参数。

因此对于上面日期类型中举的例子,我们可以使用sqlite提供的函数

drop table if exists test_time;
create table test_time (date_value date,time_value time,year_value year,datetime_value datetime
);
insert into test_time values(date('now'),time('now','localtime'),datetime('now','localtime'),datetime('now','localtime'));

具体使用可查看:SQLite 日期 & 时间

SQLite 日期 & 时间 | 菜鸟教程

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

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

相关文章

如何使用PHP实现多语言网站功能

如何使用PHP实现多语言网站功能 在全球化的今天,开发多语言网站成为了一个必要的需求。PHP作为一种常用的编程语言,可以很方便地实现多语言网站功能。本文将介绍如何使用PHP实现多语言网站功能,并提供相应的代码示例。 一、创建语言文件 首先…

如果将PC电脑变成web服务器:使用python3监测公网IP实现DDNS

如果将PC电脑变成web服务器:使用python3监测公网IP实现DDNS 上一篇文章中,我们使用Nignx的反向代理和端口转发实现域名访问家里主机上的web了。 由于家庭宽带基本都是动态IP,每当你重启一次光猫,IP地址就会变化一次。当光猫因为…

ubuntu修改默认文件权限umask

最近在使用ubuntu的过程中发现一个问题: 环境是AWS EC2,登录用户ubuntu,系统默认的umask是027,修改/etc/profile文件中umask 027为022后,发现从ubuntu用户sudo su过去root用户登录查询到的umask还是027,而…

C++动态库编程 | C++名称改编、标准C接口、extern “C”、函数调用约定以及def文件详解

目录 1、导入导出声明 2、C函数名称改编与extern "C" 3、函数调用约定与跨语言调用 3.1、函数调用约定 3.2、跨语言调用dll库接口 3.3、函数调用约定以哪个为准 4、def文件的使用 5、在C程序中引用ffmpeg库中的头文件链接报错问题 6、最后 VC常用功能开发汇…

基于RUM高效治理网站用户体验入门-价值篇

用户体验 用户体验基本包含访问网站的性能、可用性和正确性。通俗的讲,就是一把通过用户访问测量【设计者】意图的尺子。 本文目的 网站如何传递出设计者的意图,可能收页面加载时间太长、或者页面在用户的浏览器中渲染时间太慢,或者第三方设…

使用Maven父工程构建spring boot子工程

1.父工程删除src目录,pom文件配置parent为spring-boot-starter-parent 2.创建子工程,子工程引入一个springboot相关依赖 注意:子工程引入springboot相关依赖之后子工程才能被解析为springboot模块

单片机学习-蜂鸣器如何发出声音

硬件电路 软件编写 ①发出声音 #include "reg52.h" typedef unsigned int u16; // 重新定义 类型 typedef unsigned char u8; // 重新定义 类型sbit BEEP P2^5; //定义 P2第五个管教 为BEEP // 延时函数 void delay_time(u16 times) {while(times--); } vo…

qt tableview setEditTriggers解析

EditTrigger EditTrigger是QAbstractItemView Class的Public Function This property holds which actions will initiate item editing 此属性保存哪些操作将启动项编辑 This property is a selection of flags defined by EditTrigger, combined using the OR operator. T…

python编程环境使用技巧2-python环境迁移

Python环境迁移步骤 将Python环境从一个计算机迁移到另一个计算机可以按照以下步骤进行: 1-备份环境: 在源计算机上,使用pip工具备份当前Python环境的包列表到一个文本文件。在命令行终端中执行以下命令: pip freeze > requi…

layUI 中 穿梭框无法获取值的细节问题

初始化的时候一定要指定id,不然就会出现无法调用 获得右侧数据和实例重载的方法

C++ Primer 第2章 变量和基本类型

C Primer 第2章 变量和基本类型 2.1 基本内置类型2.1.1 算术类型一、带符号类型和无符号类型练习 2.1.2 类型转换一、含有无符号类型的表达式 2.1.3 字面值常量一、整型和浮点型字面值二、字符和字符串字面值三、转义序列四、指定字面值的类型五、布尔字面值和指针字面值 2.2 变…

网络字节序——TCP接口及其实现简单TCP服务器

网络字节序——TCP接口及其实现简单TCP服务器 文章目录 网络字节序——TCP接口及其实现简单TCP服务器简单TCP服务器的实现1. 单进程版:客户端串行版2. 多进程版:客户端并行版netstat查看网络信息3.多线程版:并行执行log.hpp 守护进程fg、bg s…

Vue的使用

Vue的使用 Vue到底是啥?Vue中包含了两部分虚拟DOM 模块化编程虚拟DOM,在我们重用模板的时候,在Vue中存在虚拟DOM 虚拟DOM是为了更好的去重用我们的DOM (增加元素的时候,先去虚拟DOM找是否存在,如果有那么不用生成&am…

android系统启动流程之init启动分析

先根据上图来描述下安卓整个系统的启动流程: 当上电时,系统先执行BootRom, 加载引导程序执行。 然后进入bootloader,在安卓系统中基本上这个bootloader是uboot, 通过uboot引导启动内核,此时运行在kernel空间,这时的i…

【Go 基础篇】Go语言中的自定义错误处理

错误是程序开发过程中不可避免的一部分,而Go语言以其简洁和高效的特性闻名。在Go中,自定义错误(Custom Errors)是一种强大的方式,可以为特定应用场景创建清晰的错误类型,以便更好地处理和调试问题。本文将详…

基于Googlenet深度学习网络的交通工具种类识别matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ....................................................................................% 获…

SpringCloud之断路器聚合监控

一、Hystrix Turbine简介 看单个的Hystrix Dashboard的数据并没有什么多大的价值,要想看这个系统的Hystrix Dashboard数据就需要用到Hystrix Turbine。Hystrix Turbine将每个服务Hystrix Dashboard数据进行了整合。Hystrix Turbine的使用非常简单,只需要…

CSS中如何改变鼠标指针样式(cursor)?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ CSS中改变鼠标指针样式(cursor)⭐ 示例:⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅…

废品回收抢单派单小程序开源版开发

废品回收抢单派单小程序开源版开发 用户注册和登录:用户可以通过手机号码注册和登录小程序,以便使用废品回收抢单派单功能。废品回收订单发布:用户可以发布废品回收订单,包括废品种类、数量、回收地点等信息。废品回收抢单&#…

【CSS】网站 网格商品展示 模块制作 ( 清除浮动需求 | 没有设置高度的盒子且内部设置了浮动 | 使用双伪元素清除浮动 )

一、清除浮动需求 ( 没有设置高度的盒子且内部设置了浮动 ) 绘制的如下模块 : 在上面的盒子中 , 没有设置高度 , 只设置了一个 1215px 的宽度 ; 在列表中每个列表项都设置了 浮动 ; /* 网格商品展示 */ .box-bd {/* 处理列表间隙导致意外换行问题一排有 5 个 228x270 的盒子…