MySql 踩坑小记
MySql 踩坑一时爽,一直踩啊一直爽...
以下记录刚踩的三个坑,emmm... 首先是远程机子上创建表错误(踩第一个坑),于是将本地机器 MySql 版本回退至和远程一致(踩第二个坑),最后在第二个坑里踩到了第三个坑。
Sequelize 创建表报错
针对 Sequelize 创建表的时候,报错 Specified key was too long; max key length is 767 bytes
原因:数据库针对索引列的长度限制为最大 767byte
至于为什么会加上索引? 因为 Sequelize 默认给列加唯一约束的时候会同时生成索引以达到约束唯一的时候效率更快,其实只是Sequelize做了个优化,容易让开发者误操作,Sequelize的issues上也有相关的讨论。
长度计算例子:
1 2 3 4 5 6 | @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 服务 (或者终端使用命令)
1 | sudo /usr/local/mysql * /support-files/mysql .server stop |
2. 以安全模式启动 MySql 服务,终端命令(这个命令是 ctrl+z 退出的)
1 | sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables |
3. 新开一个终端面板,执行命令,用 root 身份登录 mysql 服务,输入电脑的 root 密码
1 | sudo /usr/local/mysql/bin/mysql -u root |
4. 这时候进入 mysql 服务环境了,注意终端的前缀是 mysql> 的,然后执行修改密码语句(注意:根据版本不同,字段也有所不同,可以通过 sql 语句先查看)
1 2 3 4 5 | # 建议先查看再更新 # 查看 show columns from user from mysql # 更新 UPDATE mysql.user SET authentication_string=PASSWORD( 'test@123' ), password_expired= 'N' WHERE User= 'root' ;<br> |
5. 完成后通过 MySql 面板或者终端重启即可
安全模式启动后,可无需密码登录,所以歩骤 3-4 也可在数据库管理应用内操作~
MySql 命令行注意事项
命令行支持换行,所以当结束一行的时候需要以分号 ; 结尾。
由于习惯了单行输入即出结果,没注意支持分行的问题,所以就入了这个坑。
举个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 正确 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;<br> |
刷着官网的文档也没能避免这些坑,心也是挺累的...
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?