sequelize 連接低版本 mysql 數據庫,寫入中文報錯的問題

如果你在使用 nodejs 開發後臺,同時又需要使用 mysql 數據庫來存儲數據的話,也許會遇到過,存儲中文數據的時候,發現亂碼或者報錯了。

之前碰到過這個問題,在此記錄下解決方案。

一般來說,mysql 版本越高,兼容性越好,如果你使用的是最新版本的數據庫,估計不會出現兼容性問題。

但是,如果你使用的是老版本的數據庫,比如 5.x 版本的數據庫,很有可能就會遇到兼容性問題了。

我之前在本地開發的時候,一直用的是最新版的 mysql 數據庫,因爲我本地機器配置還可以,不會出現太大的問題。

但是後來需要把項目部署到服務器上,就發現,問題來了。

因爲公司的服務器配置着實不敢恭維,但是偏偏他又是老闆交代下來的任務,不得完成。

於是爲了讓項目順利跑起來,又不至於時不時宕機,只好儘可能的給服務器裝上最低版本的數據庫了。

至於怎麼裝 mysql,這裏就不贅述了,有興趣的童鞋可以參考博主寫的別的文章,或者求助於萬能的 Google。

在嘗試了半天終於裝好了 5.7 版本的 mysql,運行起來,很順利,很絲滑,毫無問題,有種一氣呵成的感覺。

但是最後導數據的時候,就卡住了。

因爲數據裏有中文,從本地數據庫導出來的數據,導入到服務器上一直報錯。

後來不死心,想着把數據重新編輯一份兒不就好了,沒想到還是不行,還是報錯。

雖然知道,肯定是數據庫字符集的鍋,但是還是得經過一番 Google 嘗試。

最後終於找到最方便的解決方法了,就是在用 sequelize 創建表的時候,給 option 中配置上 charset 和 collate,設置爲 utf8 相關的,然後就能保證兼融不同版本的數據庫了,用起來真是很舒服。

/** 創建表的時候,指定字符集,兼容低版本的 mysql 數據庫 */
Object.assign(option, {
  charset: 'utf8',
  collate: 'utf8_general_ci',
});

const table = sequelize.define(tableName, tableStructure, option);

參考文章:https://stackoverflow.com/questions/41666820/node-sequelize-mysql-how-to-define-collation-and-charset-to-models

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章