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