日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

MySql 踩坑小记

發(fā)布時(shí)間:2025/7/25 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySql 踩坑小记 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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/下,自行尋找。

  • 在 System Preferences > MySql 面板停止 MySql 服務(wù) (或者終端使用命令)
  • sudo /usr/local/mysql*/support-files/mysql.server stop
  • 以安全模式啟動(dòng) MySql 服務(wù),終端命令(這個(gè)命令是 ctrl+z 退出的)
  • sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
  • 新開一個(gè)終端面板,執(zhí)行命令,用 root 身份登錄 mysql 服務(wù),輸入電腦的 root 密碼
  • sudo /usr/local/mysql/bin/mysql -u root
  • 這時(shí)候進(jìn)入 mysql 服務(wù)環(huán)境了,注意終端的前綴是 mysql> 的,然后執(zhí)行修改密碼語句(注意:根據(jù)版本不同,字段也有所不同,可以通過 sql 語句先查看)
  • # 建議先查看再更新 # 查看show columns from user from mysql # 更新UPDATE mysql.user SET authentication_string=PASSWORD('test@123'), password_expired='N' WHERE User='root';;
  • 完成后通過 MySql 面板或者終端重啟即可
  • 安全模式啟動(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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。