MySQL

分类下相关文章

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 运行之后,按照提 ...

阅读全文...

MySQL 删除 N 天前的数据

例如,我想删除日志表7天前的数据: DELETE FROM logs WHERE created_at < NOW() - INTERVAL 7 DAY 这样,就达到了只保留一周内数据的目的,节省存储空间。 ...

阅读全文...

MySQL 什么版本开始支持 utf8mb4 和 utf8 编码的

utf8mb4 MySQL在 5.5.3 之后增加了 utf8mb4 字符编码,mb4即 most bytes 4。简单说 utf8mb4 是 utf8 的超集并完全兼容utf8,能够用四个字节存储更多的字符。 utf8 MySQL从4.1版本开始支持UTF-8,也就是2003年,而今天使用的UTF-8标准(RFC 3629)是随后才出现的。 ...

阅读全文...

MySQL created_at 日期时间字段在数据变更时,自动更新

今天在使用 GoAdmin 开发后台功能时,发现 GoAdmin 没有像 Laravel 那样自带 created_at 字段更新功能。即数据发送变化时,无法自动更新 created_at 字段。 而 formList.SetUpdateFn 这个功能,需要将所有字段都处理,也不方便更新 created_at. 最终在 GoAdmin QQ 群里请教了一下大佬,得到了一个不错的解决方法,即直接使用 MySQL 的 on update 功能。 MySQL Workbench 中右键点击字段名,在右键菜单中选择最后一项 DEFAULT CURRENT_TIMESTAMP ON UPDATE CU ...

阅读全文...

MySQL 导出数据时报错 UnicodeEncodeError

一个微信的陌生人咨询,在 MySQL 导出数据时遇到问题。截图如下: 在导出数据时,报错: 'ascii' codec can't encode characters in position 9-10: ordinal not in range(128) 具体错误为: UnicodeEncodeError('ascii', u'C:\Users\\u611a\u8005\Desktop\12345.csv', 9, 11, 'ordinal not in range(128)') 看起来是 MySQL Workbench 在用 Python 做处理时,没有做好编码转换。而导出的目标目 ...

阅读全文...