zoukankan      html  css  js  c++  java
  • 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;
     
    刷着官网的文档也没能避免这些坑,心也是挺累的...
     
  • 相关阅读:
    javaweb学习总结(二十九)——EL表达式
    javaweb学习总结(二十八)——JSTL标签库之核心标签
    javaweb学习总结(二十七)——jsp简单标签开发案例和打包
    在Servlet使用getServletContext()获取ServletContext对象出现java.lang.NullPointerException(空指针)异常的解决办法
    javaweb学习总结(二十六)——jsp简单标签标签库开发(二)
    javaweb学习总结(二十五)——jsp简单标签开发(一)
    javaweb学习总结(二十四)——jsp传统标签开发
    javaweb学习总结(二十三)——jsp自定义标签开发入门
    javaweb学习总结(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册
    javaweb学习总结(二十一)——JavaWeb的两种开发模式
  • 原文地址:https://www.cnblogs.com/ys-ys/p/10616016.html
Copyright © 2011-2022 走看看