MySQL

分类下相关文章

清理线上系统的测试数据,使用 truncate 还是 delete

有个开发了一个多月的大赛报名系统终于要上线了。上线前有一项重要的任务就是清理 MySQL 数据库中的测试数据。 简单粗暴的所有表都 truncate 一遍是不行的。因为还有一些是配置项表,和数据字典表,清空了就白忙活了。所以,需要记录哪些表是可以清理的,哪些是不行。 😅 使用 truncate 还是 delete 清理前,还有一个重要的概念。就是究竟是用 truncate 还是 delete 来清理数据表。 印象中,好多年前遇到过这个问题,还被 truncate 坑过一次。因为如果部分表用 truncate,而关联表不用的话,会导致数据错乱。原因是 truncate 会导致主键自增 ID 重置 ...

阅读全文...

设置 MySQL binlog 保存天数,节省服务器硬盘空间

周五总是充满了意外,先是一个还没经过完全测试的大赛系统被甲方抢先上线,吓个半死; 然后发现一台服务器的上磁盘空间满了。。。😱 为了快速清理磁盘空间,顺序清理了: Nginx 日志 Web 框架日志 系统日志 但是也只能勉强清理出来不到 5G。 然后 使用 ncdu 命令分析 linux 磁盘空间占用 意外的发现 MySQL 目录下的 binlog 占用了近 100G。 之前一天大概 1~2G 的日志,但是这个周飙到了每天 7~8G 。。。 紧急清理 可以通过 MySQL console 中,使用 SQL 清理某个编号之前的 binlog 日志文件: 例如,清理 100 编号前的 binlo ...

阅读全文...

MySQL 对中文进行拼音排序

我想将 MySQL 返回的中文数据按照拼音进行排序并返回,例如,省份列表: Order("CONVERT(province USING gbk) COLLATE gbk_chinese_ci") 这是 golang gorm 的写法。 但是会有一个问题,就是对于多音字的处理。看一下返回: "安徽省", "北京市", "福建省", "甘肃省", "广东省", "广西壮族自治区", "贵州省& ...

阅读全文...

Github Copilot Chat 初试,通过 SQL 导入 CSV 文件到 MySQL 数据表

我想将一个 Excel 中的数据导入到 MySQL 数据表,首先,将 Excel 转成了 CSV 文件。 但是不知道为啥,MySQL Workbench 的 Table Data Import Wizard 选中 CSV 文件之后就崩溃。 于是我想为何不用 Github Copilot 生成 SQL 来处理呢?正好试试 Chat 功能。 非常 nb,稍微修改一下就能直接使用。你可能会觉得,这跟直接向 chatgpt,或者豆包之类的 AI 问问题,得到答案没有什么不同啊?但是,copilot 加入了文件 context 之后,就能精准的把字段都识别出来了,省去了手工输入字段的麻烦。 Copil ...

阅读全文...

MySQL 8 之后版本的默认字符集已经变成了 utf8mb4

昨天在翻一本 MySQL 书籍的时候,发现 MySQL 8.0 之后,默认的数据库字符集已经变成了 utf8mb4。 而我这么多年一直还是习惯性的新建数据库时,手动指定 utf8mb4 字符集和 collation 。。。看来以后可以省去这个多余的操作了。 The default MySQL server character set and collation are utf8mb4 and utf8mb4_0900_ai_ci, but you can specify character sets at the server, database, table, column, and st ...

阅读全文...

SQL 统计过去 12 个月内,按月统计记录条数,基于 created_at 字段

例如,我想统计过去一年内,每个月发布的博客数量。 即,查询 MySQL 表中过去 12 个月内,按月统计记录条数,基于 created_at 字段。 MySQL SQL 语句 SELECT YEAR(created_at) AS year, MONTH(created_at) AS month, COUNT(*) AS count FROM article WHERE created_at >= DATE_SUB(CURDATE(), INTERVAL 12 MONTH) GROUP BY YEAR(created_at), MON ...

阅读全文...

MySQL 某个字段排序,按照指定值的顺序

没想到这么多年还是要继续写微信小程序会员卡开卡、扣卡这种逻辑,又是脑子炸裂的一天。 排序需求 会员卡使用状态字段,在数据库中的对应值如下 Status int // 卡状态。0 待使用; 1 已使用; 2 使用完; 3 已退卡; 4 退卡中 如果想按照如下顺序排序: 待使用 已使用 退卡中 使用完 已退卡 那么就不能直接使用 order by status asc 这种的方式。 指定值排序 解决方法是使用 SELECT * FROM user_card ORDER BY FIELD(status, 0, 1, 4, 2, 3) 注意: 如果字段包含的值不在指定的值列表中,则该字段的值 ...

阅读全文...

MySQL 查询日期类型字段在某个月的数据

在做的一个财务预算管理小程序部门支出流水功能,需要能查询出指定月份的财务流水数据。 MySQL 数据库中存储了财务支出条目发生的日期,需要能通过年月来过滤查询。 例如,我要查询 2022 年 3 月份的所有财务数据。 方法一(推荐) SELECT * FROM financial_history WHERE `date` BETWEEN '2022-03-01' AND LAST_DAY('2022-03-01') MySQL LAST_DAY 函数返回当前 date 或 datetime 类型值对应月份的最后一天。 MySQL LAST_DAY() returns the last d ...

阅读全文...

ERROR 1170 (42000): BLOB/TEXT column 'title' used in key specification without a key length

今天在 MySQL 中建表时,报错 ERROR 1170 (42000): BLOB/TEXT column 'title' used in key specification without a key length 从错误信息字面上看,是 text 类型作为唯一索引时,必须指定长度。 出错的建表 SQL CREATE TABLE `question` ( `id` INT NOT NULL AUTO_INCREMENT, `title` TEXT NULL, `answers` VARCHAR(255) NULL, `created_at` DATETIME NULL ...

阅读全文...

MySQL 一键导出全部数据表的建表 SQL 语句

在开发时,经常要将最新的 MySQL 建表语句保存到 Git 项目中作为备份。 以方便在新的开发环境快速搭建数据库环境。 一张一张表复制黏贴太慢了,有没有一次导出全部建表语句的方法? 导出方法 MySQL Workbench 客户端,同时选中多个数据表,右键 - Copy to clipboard - Create Statement. 即可复制到剪切板,再黏贴到一个本地文件中即可。 ...

阅读全文...

mysql 导出文件以 utf8mb4 编码

由于 mysql 导出数据中包含了大量的 emoji 表情,而 emoji 表情是以 utf8mb4 进行编码的。 发现用记事本打开 mysql workbench 8.0 导出的 sql 文件,里面的 emoji 表情都是乱码。说明导出文件的文件编码是错误的。 正确做法,命令行版 以导出数据库 test_db 为例: mysqldump --default-character-set=utf8mb4 -uuser -p test_db > data.sql mysql workbench 如何操作 TODO ...

阅读全文...

mysql workbench need visual c++ 2019 解决方法

在 Windows 10 系统上安装 MySQL Workbench 8.0,弹窗提示报错: mysql workbench need visual c++ 2019 然后提示你去官方手动下载依赖。。。 visual c++ 2019 下载地址 https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads 只需要下载 VC_redist.x64.exe 这一个安装文件,只有 14M 大,本以为需要几个G。 安装之后会提示重启,然后就可以正常安装 MySQL Workbenc ...

阅读全文...

WSL 安装 mysql8 报错:cannot read realtime clock: Invalid argument

在 Windows 10 WSL Ubuntu 20.04 上安装 mysql 8 报错: cannot read realtime clock: Invalid argument 解决方法 wget https://launchpad.net/~rafaeldtinoco/+archive/ubuntu/lp1871129/+files/libc6_2.31-0ubuntu8+lp1871129~1_amd64.deb sudo dpkg --install libc6_2.31-0ubuntu8+lp1871129~1_amd64.deb sudo apt-mark hold li ...

阅读全文...

wordpress MySQL 8.0 报错:Error establishing a database connection

迁移了旧有的一套 wordpress 网站到新的服务器上,更改域名解析之后,报错: Error establishing a database connection 系统环境 Ubuntu 20.04 PHP 7.0 MySQL 8.0 问题排查 看上去是很简单的账号,密码问题。我确认了半天,发现 mysql 可以正常登陆,wp-config.php 中的也没有写错。 但是依旧报这个错误。感觉没有头绪了。 wordpress debug 开关打开 define( 'WP_DEBUG', true ); 发现详细错误如下: Warning: mysqli_real_connect(): ...

阅读全文...

ubuntu 20.04 apt 安装 mysql 8.0

在 Ubuntu 22.04 LTS 上验证过,安装方式是一样的。 ubuntu 20.04 apt 安装 mysql 8.0 sudo apt update sudo apt install mysql-server 此时 mysqld 服务已启动。 启动 mysql 若 mysql 没有自动启动,执行: sudo service mysql start 使用 mysql_secure_installation 进行安全配置 mysql_secure_installation 如果是在 WSL 上,执行 sudo mysql_secure_installation 运行之后,按照提 ...

阅读全文...