MySql 踩坑小记

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;
 
刷着官网的文档也没能避免这些坑,心也是挺累的...
相关文章
相关标签/搜索