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

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