mysql 拾遗
db

mysql 拾遗

arm64 debian 安装 mysql使用 default-mysql-serverhttps://superuser.com/questions/1660015/error-during-ins...

花野猫

花野猫

更新于 2024-01-14

2862

arm64 debian 安装 mysql

使用 default-mysql-server

https://serverfault.com/questions/379714/unknown-unsupported-storage-engine-innodb-mysql-ubuntu

数据库备份&导入

导出以当前日期结尾的 .sql 文件:

  • 为了防止中文乱码,需要使用 --result-file 这个参数来指定导出文件,而不是使用 >
bash
mysqldump --host localhost --port 3306 --user username -p --default-character-set=utf8 database_name --result-file="cheer_backup_$(date +'%Y-%m-%d').sql"

导入:

bash
mysql --host localhost --port 3306 -u username -p database_name < file.sql

truncate 和 drop

操作描述是否删除数据是否删除表结构是否触发触发器是否记录事务日志
TRUNCATE TABLE删除表中的所有数据,但保留表的结构和定义
DROP TABLE完全删除表,包括表的结构、定义和数据

连接时区

可以使用以下方式来设置 MySQL 连接时区为中国时区:

1.在连接 MySQL 数据库时,向 MySQL 发送“SET time_zone”语句来设置会话时区:

sql
SET time_zone = '+8:00'; -- 设置为中国时区

2.在 MySQL 配置文件中设置默认时区为中国时区:编辑 MySQL 配置文件(一般位于 /etc/my.cnf 或者 /etc/mysql/my.cnf),添加或修改以下行:保存文件并重启 MySQL 服务,即可使 MySQL 默认时区设置为中国时区。

[mysqld] default-time-zone = '+8:00'

在使用 MySQL 连接字符串连接数据库时,默认时区将与 MySQL 服务器的时区匹配。如果已经在 MySQL 配置文件中设置默认时区,连接字符串中无需再次设置时区。

如果您需要在连接字符串中设置 MySQL 会话时区:添加 “?serverTimezone=Asia/Shanghai” 参数,值为您需要的时区。如果您不想在连接字符串中设置时区,可以选择在连接 MySQL 数据库后,使用 “SET time_zone” 语句来设置当前会话时区。

使用 toLocaleString() 得到的时间,是根据客户端机器本地时区来格式化输出的。假设,您的服务器和数据库都设置的是 Asia/Shanghai 时区,但是您的客户端机器所在的时区为 UTC+8,则 toLocaleString() 得到的时间就会快 8 个小时。

为了解决这个问题,您可以通过以下两种方式:

1.在控制台中设置客户端机器的本地时区

您可以在浏览器控制台中设置客户端机器的本地时区,来获得正确的输出结果。例如,在控制台中执行以下代码:

Intl.DateTimeFormat().resolvedOptions().timeZone = "Asia/Shanghai"

这将设置客户端机器的本地时区为 Asia/Shanghai,但这种方法并不是很实用,因为大多数用户不知道该如何在控制台中执行这些代码。

2.在服务端返回正确的时区时间

另一种方法是,在服务端将时间转换为客户端机器所在时区的时间。您可以使用 Moment.js 等工具库,在服务端将时间按照客户端机器本地时区进行转换。例如,您可以使用以下代码将数据库中存储的时间转换为客户端机器本地时区的时间:使用 Moment.js 库的 tz() 方法将数据库中的时间转换为 Asia/Shanghai 时区的时间,并使用 format() 方法将时间按照 ISO 8601 格式输出。在客户端使用 toLocaleString() 方法输出当前本地时间时,就可以得到正确的结果了。

javascript
const moment = require('moment-timezone');
// 将数据库中的时间按照 'Asia/Shanghai' 时区转换为客户端本地时区的时间
const localTime = moment.utc(databaseTime).tz('Asia/Shanghai').format();
// 将转换后的本地时间返回给客户端
res.send(localTime);

如果您已经将 MySQL 的时区设置为 UTC+0,并且插入时间数据时也是按照 UTC+0 的时间插入的,那么如果您要将这些时间数据统一修改为 UTC+8 时区的时间,可以执行以下 SQL 语句:使用 MySQL 内置函数 CONVERT_TZ() 将原来存储在 UTC+0 时区的时间转换为 UTC+8 时区的时间。

sql
UPDATE your_table SET your_datetime_column = CONVERT_TZ(your_datetime_column, '+00:00', '+08:00');