MySql 踩坑小记
MySql 踩坑一時爽,一直踩啊一直爽...
以下記錄剛踩的三個坑,emmm... 首先是遠程機子上創(chuàng)建表錯誤(踩第一個坑),于是將本地機器 MySql 版本回退至和遠程一致(踩第二個坑),最后在第二個坑里踩到了第三個坑。
Sequelize 創(chuàng)建表報錯
錯誤信息:Specified key was too long; max key length is 767 bytes
針對 Sequelize 創(chuàng)建表的時候,報錯 Specified key was too long; max key length is 767 bytes
原因:數(shù)據(jù)庫針對索引列的長度限制為最大 767byte
至于為什么會加上索引? 因為 Sequelize 默認給列加唯一約束的時候會同時生成索引以達到約束唯一的時候效率更快,其實只是Sequelize做了個優(yōu)化,容易讓開發(fā)者誤操作,Sequelize的issues上也有相關的討論。
長度計算例子:
@Column({type: Sequelize.VARCHAR(260),charset:'utf8',unique: true }) desc:string這里只是想加唯一約束,但 Sequelize 默認同時加上了索引,于是數(shù)據(jù)庫計算索引長度
utf8 按 3byte 計算,得出 260*3 = 780 > 767,于是超出,報錯
方案一:
不使用 Sequelize 提供的唯一約束標識,通過 sql 語句來添加
方案二:
修改數(shù)據(jù)庫對索引鍵長度的限制 : innodb_large_prefix 選項
方案三:
將 VARCHAR 長度控制在 767/3 以內
Mac 安裝 MySql 后重置密碼
操作前先明確 MySql 安裝位置,一般默認是在 /usr/local/下,自行尋找。
安全模式啟動后,可無需密碼登錄,所以歩驟 3-4 也可在數(shù)據(jù)庫管理應用內操作~
MySql 命令行注意事項
命令行支持換行,所以當結束一行的時候需要以分號 ; 結尾。
由于習慣了單行輸入即出結果,沒注意支持分行的問題,所以就入了這個坑。
舉個例子:
show tables from mysql; # 正確show tablesfrom mysql; # 正確show tables from mysql # 錯誤show tables from mysql # 然后誤以為沒反應,繼續(xù)回車重新操作show tables from mysql; # 銜接上一行,這時候會報錯,因為語句變成了 show tables from mysql show tables from mysql;刷著官網的文檔也沒能避免這些坑,心也是挺累的...
總結
以上是生活随笔為你收集整理的MySql 踩坑小记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringMVC源码之参数解析绑定原理
- 下一篇: vue学习笔记——路由