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;
 
刷着官網的文檔也沒能避免這些坑,心也是挺累的...
相關文章
相關標籤/搜索