MySql 踩坑一时爽,一直踩啊一直爽...
 
以下记录刚踩的三个坑,emmm... 首先是远程机子上创建表错误(踩第一个坑),于是将本地机器 MySql 版本回退至和远程一致(踩第二个坑),最后在第二个坑里踩到了第三个坑。
 
Sequelize 创建表报错
 
针对 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
2. 以安全模式启动 MySql 服务,终端命令(这个命令是 ctrl+z 退出的)
  sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
3. 新开一个终端面板,执行命令,用 root 身份登录 mysql 服务,输入电脑的 root 密码
  sudo /usr/local/mysql/bin/mysql -u root
4. 这时候进入 mysql 服务环境了,注意终端的前缀是 mysql> 的,然后执行修改密码语句(注意:根据版本不同,字段也有所不同,可以通过 sql 语句先查看)
# 建议先查看再更新
# 查看
show columns from user from mysql
# 更新
UPDATE mysql.user SET authentication_string=PASSWORD('test@123'), password_expired='N' WHERE User='root';
5. 完成后通过 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 踩坑小记的更多相关文章

  1. Ubuntu 16.04 安装Mysql 5.7 踩坑小记

    title:Ubuntu 16.04 安装Mysql 5.7 踩坑小记 date: 2018.02.03 安装mysql sudo apt-get install mysql-server mysql ...

  2. CentOS7.4安装MySQL踩坑记录

    CentOS7.4安装MySQL踩坑记录 time: 2018.3.19 CentOS7.4安装MySQL时网上的文档虽然多但是不靠谱的也多, 可能因为版本与时间的问题, 所以记录下自己踩坑的过程, ...

  3. dubbo 2.7应用级服务发现踩坑小记

    本文已收录 https://github.com/lkxiaolou/lkxiaolou 欢迎star. 背景 本文记录最近一位读者反馈的dubbo 2.7.x中应用级服务发现的问题,关于dubbo应 ...

  4. Asp.Net Core Identity+EFCore + Mysql踩坑记录

    搭建基础框架准备试试传说中的Identity,本以为很顺利,结果一路踩了N多坑 遂就把过程记录下来.方便自己以后查看,也希望能帮到遇到同样问题的朋友. 1.首先,引入Identity需要的类库,还有M ...

  5. async语法升级踩坑小记

    从今年过完年回来,三月份开始,就一直在做重构相关的事情. 就在今天刚刚上线了最新一次的重构代码,希望高峰期安好,接近半年的Node.js代码重构. 包含从callback+async.waterfal ...

  6. MySql踩坑总结

    衣带渐宽终不悔,为伊消得人憔悴,众里寻他千百度,蓦然回首,那人却在灯火阑珊处好通顺的句子哈哈 转了那么多弯,才明白问题就在一个地方.睡觉之前想明白了问题,还是经验太少.王国维的治学三境界: 昨夜西风凋 ...

  7. 【MySql系列】MySql踩坑系列

    问题一:远程登录报错Host '192.168.181.201' is not allowed to connect to this MySQL server 解决: 问题二:MySql access ...

  8. 支付宝使用流程和踩坑小记(附Demo)

    # 支付宝使用整理 html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym, ...

  9. 在 ASP.NET Core 中使用 MySql 踩坑记录

    使用 Pomelo.EntityFrameworkCore.MySql 生成 MySQL 数据库 关于如何使用请查看项目文档即可 组件地址:https://github.com/PomeloFound ...

随机推荐

  1. python神器之fabric

    官网:http://www.fabfile.org/ 中文站点:http://fabric-chs.readthedocs.io/zh_CN/chs/ Fabirc是基于python实现的SSH命令行 ...

  2. 每日一练ACM 2019.0416

    2019.04.16     Problem Description Your task is to Calculate the sum of some integers.   Input Input ...

  3. JPA学习-03

    一.单向一对多 特点:性能差,不怎么用,有集合默认懒加载 @OneToMany 1.private Set<T> t = new HashSet<>() 2.private L ...

  4. Embedding层

    示例解释: model = Sequential() model.add(Embedding(1000, 64, input_length=10)) #输入中的数值最大值是1000,输出的第三维度是6 ...

  5. spring boot + vue + element-ui全栈开发入门

    今天想弄弄element-ui  然后就在网上找了个例子 感觉还是可以用的  第一步是完成了  果断 拿过来  放到我这里这  下面直接是连接  点进去 就可以用啊 本想着不用vue   直接导入连接 ...

  6. 第2周个人作业:WordCount

    Github地址: https://github.com/hddddd/Wordcount 1.PSP表格 PSP2.1 PSP阶段 预估耗时(分钟) 实际耗时(分钟) Planning 计划 30 ...

  7. 不停止nginx服务,使配置文件生效

    ps -ef | grep "nginx: master process" | grep -v "grep" | awk -F ' ' '{print $2}' ...

  8. ORACLE提交事务回滚

    execute执行后 可以回滚 commit提交后 闪回恢复原来的数据 其实Oracle提交数据是分两步操作的,第一步execute执行,第二步commit提交.对应的PL\SQL也是要先点execu ...

  9. 协程 及 libco 介绍

    libco 是腾讯开源的一个协程库,主要应用于微信后台RPC框架,下面我们从为什么使用协程.如何实现协程.libco使用等方面了解协程和libco. why协程 为什么使用协程,我们先从server框 ...

  10. gitlab导入现在git项目

    确保管理员所在机器的ssh 公钥已经保存在gitlab网站上. 这样管理员可以在自己的机器上和gitlab系统交互. 现在在管理员自己的机器上,进入项目目录(项目目录拷贝自git server,目录后 ...