MySql 踩坑小记

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySql 踩坑一时爽,一直踩啊一直爽...以下记录刚踩的三个坑,emmm... 首先是远程机子上创建表错误(踩第一个坑),于是将本地机器 MySql 版本回退至和远程一致(踩第二个坑),最后在第二个坑里踩到了第三个坑。

MySql 踩坑一时爽,一直踩啊一直爽...

以下记录刚踩的三个坑,emmm... 首先是远程机子上创建表错误(踩第一个坑),于是将本地机器 MySql 版本回退至和远程一致(踩第二个坑),最后在第二个坑里踩到了第三个坑。

Sequelize 创建表报错

错误信息:Specified key was too long; max key length is 767 bytes

针对 Sequelize 创建表的时候,报错 Specified key was too long; max key length is 767 bytes

原因:数据库针对索引列的长度限制为最大 767byte

至于为什么会加上索引? 因为 Sequelize 默认给列加唯一约束的时候会同时生成索引以达到约束唯一的时候效率更快,其实只是Sequelize做了个优化,容易让开发者误操作,Sequelize的issues上也有相关的讨论。

长度计算例子:

@Column({
  type: Sequelize.VARCHAR(260),
  charset:'utf8',
  unique: true
})
desc:string

这里只是想加唯一约束,但 Sequelize 默认同时加上了索引,于是数据库计算索引长度

utf8 按 3byte 计算,得出 260*3 = 780 > 767,于是超出,报错

方案一:
不使用 Sequelize 提供的唯一约束标识,通过 sql 语句来添加

方案二:
修改数据库对索引键长度的限制 : innodb_large_prefix 选项

方案三:
将 VARCHAR 长度控制在 767/3 以内

Mac 安装 MySql 后重置密码

操作前先明确 MySql 安装位置,一般默认是在 /usr/local/下,自行寻找。

  1. 在 System Preferences > MySql 面板停止 MySql 服务 (或者终端使用命令)
  sudo /usr/local/mysql*/support-files/mysql.server stop
  1. 以安全模式启动 MySql 服务,终端命令(这个命令是 ctrl+z 退出的)
  sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
  1. 新开一个终端面板,执行命令,用 root 身份登录 mysql 服务,输入电脑的 root 密码
  sudo /usr/local/mysql/bin/mysql -u root
  1. 这时候进入 mysql 服务环境了,注意终端的前缀是 mysql> 的,然后执行修改密码语句(注意:根据版本不同,字段也有所不同,可以通过 sql 语句先查看)
# 建议先查看再更新
# 查看
  show columns from user from mysql
# 更新
  UPDATE mysql.user SET authentication_string=PASSWORD('test@123'), password_expired='N' WHERE User='root';;
  1. 完成后通过 MySql 面板或者终端重启即可

安全模式启动后,可无需密码登录,所以歩骤 3-4 也可在数据库管理应用内操作~

MySql 命令行注意事项

命令行支持换行,所以当结束一行的时候需要以分号 ; 结尾。
由于习惯了单行输入即出结果,没注意支持分行的问题,所以就入了这个坑。

举个例子:

 show tables from mysql;  # 正确

 show tables
 from mysql;    # 正确

 show tables from mysql  # 错误

 show tables from mysql   # 然后误以为没反应,继续回车重新操作
 show tables from mysql;   # 衔接上一行,这时候会报错,因为语句变成了 show tables from mysql show tables from mysql;

刷着官网的文档也没能避免这些坑,心也是挺累的...

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
存储 Oracle 关系型数据库
[MySQL]知识点
本文详细介绍了MySQL中int族和char族数据类型的特点、存储范围及使用建议,以及text、blob类型和内置字符处理函数。文章强调了数据类型选择的重要性,并提供了多个实例帮助理解。
34 0
[MySQL]知识点
|
2月前
|
SQL 关系型数据库 MySQL
MySQL_踩坑记录
【10月更文挑战第25天】本文总结了 MySQL 使用中常见的几个问题及其解决方法,包括字符编码问题、索引使用不当、数据类型选择错误、事务处理问题、连接数过多和 SQL 注入漏洞。每个问题都详细描述了可能的原因和相应的解决方案,帮助开发者避免常见陷阱,提高数据库的稳定性和性能。
|
4月前
|
SQL 关系型数据库 MySQL
面试准备-MySQL
面试准备-MySQL
|
7月前
|
自然语言处理 搜索推荐 关系型数据库
|
存储 Oracle 关系型数据库
MYSQL知识点
MYSQL知识点
|
关系型数据库 MySQL 数据安全/隐私保护
449:安装mysql的踩坑指南
449:安装mysql的踩坑指南
|
SQL 存储 前端开发
|
存储 SQL 关系型数据库
MySQL复习资料(一)——MySQL环境安装
MySQL复习资料(一)——MySQL环境安装
92 0
MySQL复习资料(一)——MySQL环境安装
|
SQL 存储 算法
mysql常见知识点
在mysql的学习中,将一些常用的知识点写出来,句句皆干货
133 0
|
存储 SQL 关系型数据库
MySQL部分知识点总结
MySQL部分知识点总结,索引、事务、锁以及优化等
159 0
MySQL部分知识点总结