广告
广告
广告
前言MySQL 在日期和时间处理方面提供了丰富的函数和灵活的用法。1. 时间处理函数有哪些?案例与代码示例函数名作用说明示例代码及结果NOW()返回当前日期和时间SELECT NOW(); → 2024-06-01 15:30:00CURDATE()返回当前日期SELECT CURDATE(); → 2024-06-01CURTIME()返回当前时间SELECT CURTIME(); → 15:30:00DATE()提取日期部分SELECT DATE('2024-06-01 15:30:00'); → 2024-06-01TIME()提取时间部分SELECT TIME('2024-06-...
前言MySQL 中的日期和时间类型用于存储日期、时间或两者的组合。合理选择和使用这些类型对于数据的准确性和高效性至关重要。本文将介绍 MySQL 支持的主要日期类型、它们的区别、使用场景、格式化方法,以及重点讲解 TIMESTAMP 与 DATETIME 的区别。MySQL 日期类型一览类型说明DATE仅存储日期(YYYY-MM-DD),不含时间部分TIME仅存储时间(HH:MM:SS),不含日期部分YEAR存储年份(YYYY 或 YY),范围为 1901-2155 或 70-69DATETIME存储日期和时间(YYYY-MM-DD HH:MM:SS),无时区信息TIMESTAMP存储日...
前言MySQL中的SET类型是一种非常实用的数据类型,允许在单个字段中存储多个预定义的选项。它适用于需要在一列中保存多个状态、标签或权限等多选项场景。本文将详细介绍SET类型的用法、相关案例、代码示例,并重点讲解如何利用二进制进行模糊匹配及其底层原理。一、SET类型简介SET类型本质上是一个字符串对象,可以包含0个或多个值,每个值必须从事先定义好的集合中选择。每个SET列最多可以有64个不同的成员。语法示例CREATE TABLE user_tags ( id INT PRIMARY KEY AUTO_INCREMENT, tags SET('sports...
前言在MySQL数据库中,ENUM(枚举)类型是一种特殊的数据类型,用于存储一组预定义的字符串值。它非常适合用于性别、状态、类别等固定选项的数据场景。1. 什么是ENUM类型?ENUM类型允许你为某个字段定义一组可选值,插入数据时只能选择这些值之一。这样可以保证数据的规范性和一致性,防止出现拼写错误或非法数据。2. 创建带有ENUM字段的表假设我们要创建一个用户表(user),其中性别字段(gender)只有“男”、“女”、“保密”三种取值:CREATE TABLE user ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHA...
前言在MySQL中,数值类型用于存储各种数字数据。合理选择和使用数值类型对于数据的准确性、存储效率和后续运算都至关重要。本文将详细介绍MySQL中的数值类型。1. 数值类型总览MySQL的数值类型主要分为两大类:整数类型和小数类型(包括浮点数和定点数)。下表总结了常用的数值类型及其特点:类型字节数有符号范围无符号范围说明TINYINT1-128 ~ 1270 ~ 255极小整数SMALLINT2-32768 ~ 327670 ~ 65535小整数MEDIUMINT3-8388608 ~ 83886070 ~ 16777215中等整数INT/INTEGER4-2147483648 ~ 21...
前言在 MySQL 数据库中,正则表达式(Regular Expression,简称 regex)是一种强大的文本匹配工具,可以帮助我们在查询数据时实现灵活的字符串筛选。本文将介绍 MySQL 中正则表达式的基本用法和常见语法,适合新手入门。一、正则表达式的应用场景模糊查询 :比 LIKE 更灵活,可以匹配复杂的字符串模式。数据清洗 :查找或过滤出符合特定格式的数据,如手机号、邮箱等。批量替换 :配合 REGEXP_REPLACE (MySQL 8.0+)进行字符串替换。二、MySQL 中正则表达式的基本用法MySQL 提供了 REGEXP 或 RLIKE 操作符用于正则匹配。例如:SE...
字符集MySQL 常用的字符集主要有两种:utf8 (又称为 utf8mb3 )utf8mb4早期 MySQL 的 utf8 实际上是 utf8mb3 ,它最多只支持每个字符 3 个字节,无法存储部分特殊字符(如 emoji 表情等需要 4 字节的字符)。因此,推荐直接使用 utf8mb4 ,它完全兼容 utf8 ,并且支持所有 Unicode 字符,包括 emoji 和部分生僻汉字。 现在新项目建议无脑使用 utf8mb4 ,避免后续字符集兼容性问题。排序规则(Collation)如果使用 utf8mb4 ,常用的排序规则有:utf8mb4_unicode_ci :基于 Unicode...
前言最近升级了Prisma依赖后,它会在生成客户端时打印这么一句话:Warning: You did not specify an output path for your `generator` in schema.prisma. This behavior is deprecated and will no longer be supported in Prisma 7.0.0.✔ Generated Prisma Client (v6.6.0) to .\node_modules\.pnpm\@prisma+client@6.6.0_prisma_66ad65b8aa48c66bb...
数据类型类型大小用途与特性示例CHAR0-255字节定长字符串,适合存储固定长度数据,如账号密码。VARCHAR0-65535字节变长字符串,适合存储长度不定的数据,例如用户名、邮件地址。TINYBLOB0-255字节小型二进制数据,适合存储小格式图片或图标。TINYTEXT0-255字节短文本字符串,适合存储简短消息或注释。BLOB0-65535字节中等大小二进制数据,适合存储文档或媒体文件。TEXT0-65535字节长文本数据,适合存储博客文章内容、产品描述。MEDIUMBLOB0-16777215字节中等长度二进制数据,适合存储高分辨率图像。MEDIUMTEXT0-16777215...
前言乘着年底没什么事,把axios和axios-retry的源码简单看了下,总结了下一些最佳实践。axios本身axios有个很便捷的使用方式,就是它既可以作为函数发起请求:axios(),也能通过它身上的属性,如:get、post、delete等来发起对应请求,也可以通过axios.request()来发起更加灵活配置请求,甚至还能通过axios.create()来创建自定义配置的请求实例。为什么它能有这么多请求方式?其实就是axios本身就是axios.request这个方法的bind返回值,当我们import引入这个axios的时候,引入的是request函数。import axi...
前言之前写了一篇 Github Actions 怎么将build的内容发布到 Releases 上,这次想将前端的SPA项目搞一个在线预览的站点,但是又没有经济实力提供一个服务器来进行部署,所以就参考了下一些开源项目,发现他们都是用 Github Pages 来做在线预览的,所以我也想弄一个。本篇文章就不细说基本内容了,想入门的可以看之前那篇:《使用Github Actions打包前端项目并自动上传到Releases》教程我本来的意思是,先用 Actions 打包后,再克隆一个仓库,切换到 Github Pages 的分支,将dsit目录里的内容复制到这个 Github Pages 的...
前言最近在写AI训练器的UI界面,有一个需求就是展示TOML配置,为此就需要用到代码高亮,我之前用过 highlight.js 和 PrismJS,但是在撰写VitePress项目配置时发现了一个新的代码高亮库:shiki。shiki可以省去维护css和html,并且原生就是ESM按需加载,支持多种主题等,已经满足了我对一个代码高亮的需求,为此我去尝试用了下这个,于是有了本篇文章。插件文档:Shiki语法高亮器github:shiki注意事项shiki是按需加载的,它的实现方式就是除了一个主体的js文件,在打包后会有非常多的不同代码语言的解析器脚本文件,但是不用担心,这些脚本文件只有在真...
前言最近终于将常用的设备都替换成了2.5g网口了,为了就是希望局域网看电影的时候,拖拽视频进度条能少卡顿一点,但是发现一个很蛋疼的问题,明明wifi已经是wifi6的极致了,2400mbps了,换算成文件大小怎么也可以300m每秒的文件,但是在内网传输文件的时候发现速度只有10mb,贼难受,想要测试一下速度,发现不知道怎么弄。为此写一篇文章留给有需要的人,也方便自己以后使用。首先我的路由器是ikuai爱快,或者你的路由器支持iperf3这个功能,那么也能照着这个教程来测试内网速度。教程首先我们开启爱快的内网测试功能,如果是支持iperf3的路由器,自行去开启这个功能。找到:应用工具 --...
需求想实现网络层完整的翻墙处理,除了旁路由的方式,我们还可以通过爱快的双wan口来实现,爱快本身实现了双wan口无网自动切换,我们只需要让其中一个wan口是可以翻墙的,并设置为主wan即可。当翻墙的主wan口无法访问时,爱快会切换另一条wan口,从而保持网络畅通,虽然切换的时候会有一小段时间是没有网络的。示意图功能实现[hide]安装PVE首先我们拥有一台多网口的x86设备,并且安装了pve系统,具体的操作就不多说了,基本上就是:下载pve系统iso文件,刻录到U盘,启动,安装,b站有很多教程,随便找一个照着做就行了。这里提供一个脚本,用于给pve显示设备温度和cpu功耗等信息。你需要S...
前言前端的复制功能第一次使用的时候还记忆犹新,那时根本不知道怎么操作,复制它到底是怎么实现的,该怎么去触发,百度查看了不知道多少所谓的复制功能文档,每篇都有不一样的用法,我总想着有一天能搞清楚这些,毕竟现在复制功能已经web功能开发中离不开了。execCommand API浏览器在document对象上暴露了execCommand方法,该方法允许使用者通过输入“命令”的方式来操作 可编辑内容区域 的元素。可编辑内容区域被官方认为是contenteditable="true"的html元素,但按道理,input这些应该也是算可编辑内容区域的。这些都不重要,我们这次关注的...
更改表名ALTER TABLE test RENAME tests;或者:RENAME TABLE test to tests;将test表改成tests表。更改表的字符集比如更改为gbk,不过用的很少,一般创建数据库时就已经定好了,不会再改动。ALTER TABLE tests CHARSET gbk;清空表数据DELETE FROM test;使用delete删除有的软件会提示你没有where条件,是否全部删除,有的不会,这种方式删除会比较慢。我们可以用这种方式:TRUNCATE test;删除表DROP TABLE IF EXISTS test;用if判断下表是否存在,存在则删除。...
前言最近在开发一个Chrome插件,在阅读官方文档时发现它提供的都是js的方式,完全没有工程化的概念,而且插件的版本已经到v3了,v3版本限制了非常多的东西,比如我们使用vue的template渲染,由于vue用到了eval来实现,导致插件会报错,蛋疼的很,总不能写手写render函数吧,太累了。最好的解决办法就是用vite来打包vue项目,这样既可以用vue组件的方式开发,打包时也会将template转换成render函数,从而避免了eval的报错,我们还可以使用到ts和scss这些便利的工具。为此我们搭建一个开发模板需要实现以下功能:支持vite打包支持typescript支持scs...
前言更新系统需要下载很多相关依赖,如果在国内,我建议是先换源,换成国内源再更新,如果是vps主机,应该就不用考虑这个事情了,不知道换源可以看我之前的文章。教程首先更新软件包索引:sudo apt update然后升级已安装的软件包:sudo apt upgrade如果你想更加果断,比如你是新装的系统,不需要考虑包之前的依赖啥的,可以直接全面升级:sudo apt full-upgrade这种方式也适合有时候的内核更新。完事后我们清理下无用的安装包:sudo apt autoremove一般情况下不需要重启系统,如果你不放心可以重启一下:reboot查看系统版本完事后重新连接ssh,我们可...
查询一个表的所有字段SELECT * FROM user;查询了user表的所有字段。指定字段查询SELECT id,email FROM user;别名SELECT id,email AS emails FROM user;它会将email字段名改成emails展示。查询条件-包含查询email中含有@符号的数据:SELECT * FROM user WHERE email LIKE "%@%";查询email中含有@符号并且id大于2的数据:SELECT * FROM user WHERE email LIKE "%@%" AND id>...
先进入数据库。创建表CREATE TABLE user ( id INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL, nickname VARCHAR(30) NULL, gender TINYINT NOT NULL DEFAULT 0, email VARCHAR(100) NOT NULL );查看表结构DESC user;给表添加数据INSERT INTO user SET email = "13xxx@qq.com",gender = 1;另一种添加方式,适合多条数据:INSERT INTO user (...
创建数据库CREATE DATABASE test CHARSET utf8mb4;查看所有数据库show DATABASES;进入指定数据库use 数据库名;查看创建的数据库信息SHOW CREATE DATABASE `ease-change-backend`;得到:CREATE DATABASE `ease-change-backend` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */ /*!80016 DEFAULT ENCRYPTION='N' */数据库名可以用`来包...
前言应公司业务需求,最近在写一个谷歌插件,我本来想手动build后将dist目录打包成zip手动Releases一下,但leader说这样太浪费时间了,让我用github的Actions来做,我也是头一回接触这个,两眼一抹黑,花了点时间了解后,成功实现了该功能,可以理解为actions就是预先定义的操作步骤,将多个步骤组合成一个workflows工作流,每次通过触发条件触发这个工作流,有点类似CI/CD的感觉。教程创建workflows首先我们需要在项目根目录创建文件夹:.github └─ workflows创建一个.github目录,在该目录下再创建一个workflows目录,之...
前言一直很头疼axios的失败重试插件axios-retry会重复调用axios自定义的响应错误拦截器,而我们常常会在这个拦截器中编写一个用于弹出错误消息的弹窗,这就导致了一个问题:如果我们失败会重试3次,那么全部都失败的话就会触发4次响应错误拦截器,然后就会导致触发4次错误消息的弹窗,非常蛋疼。为此常常需要考虑怎么避免重复触发的问题,常见的一些做法比如通过自定义的拦截器接受的error对象上的config属性,添加一个计数器来处理,如果计数器大于等于3的话就可以触发消息弹窗。本来axios-retry插件本身就会在config上注入一个计数的属性和总次数,但是也没法用,实际测试中发现,...
前言在使用 Prisma 的 seed 功能时,我遇到了一个非常棘手的问题:默认情况下,ts-node 会将其运行的脚本视为一个独立的文件进行转换,这导致无法识别较新的 JavaScript API 或路径别名。这在一些复杂场景中特别麻烦,因为我们往往需要复用项目中的工具函数,而由于文件层级的原因,往往不得不使用大量的 ../../../ 路径。更糟糕的是,如果 A 文件引入 B 文件,而 B 文件又无法使用路径别名,这种链式问题使得项目结构变得更加复杂且难以维护。因此,我开始思考一下如何能够简化这一过程,并复用已有的 TypeScript 配置。教程[hide]首先我们先看下我的运行命...
最近评论