Node、Sequelize、Mysql - 如何为模型定义排序规则和字符集?
Posted
技术标签:
【中文标题】Node、Sequelize、Mysql - 如何为模型定义排序规则和字符集?【英文标题】:Node, Sequelize, Mysql - How to define collation and charset to models? 【发布时间】:2017-05-30 17:26:30 【问题描述】:我正在使用 sequelize /w node 和 node-mysql。
我使用 sequelize-cli 创建模型,结果如下:
'use strict';
module.exports = function(sequelize, DataTypes)
let songs = sequelize.define('songs',
name: DataTypes.STRING,
link: DataTypes.STRING,
artist: DataTypes.STRING,
lyrics: DataTypes.TEXT,
writer: DataTypes.STRING,
composer: DataTypes.STRING
);
return songs;
;
我希望能够为模型的每个属性定义排序规则和字符集。 默认排序规则是'latin1_swedish_ci',我需要它在'utf-8'中。
有人吗? 天呐
【问题讨论】:
【参考方案1】:在你定义续集的部分
var sequelize = new Sequelize('database', 'username', 'password',
define:
charset: 'utf8',
collate: 'utf8_general_ci',
timestamps: true
,
logging:false
);
对于表级变化
sequelize.define('songs',
name: DataTypes.STRING,
link: DataTypes.STRING,
artist: DataTypes.STRING,
lyrics: DataTypes.TEXT,
writer: DataTypes.STRING,
composer: DataTypes.STRING
,
charset: 'utf8',
collate: 'utf8_unicode_ci'
);
【讨论】:
似乎没有简单的方法来设置每列的字符集,这是一个令人难以置信的痛苦。 @jlh 在这个问题上有一条评论完成了你正在寻找的东西:github.com/sequelize/sequelize/issues/7110 @GianniCarlo 谢谢!但对我来说,这更像是一种 hacky SQL 注入。不是我想要的代码,我想成为可靠和面向未来的代码。但对于某些用例,这可能是可以接受的。 显然,collate 是非法的,它应该只是字符集【参考方案2】:添加 utf-8 非常简单,只需转到您拥有的任何模型并执行此操作(例如,我编辑您的代码):
module.exports = function(sequelize, DataTypes)
let songs = sequelize.define('songs',
name: DataTypes.STRING,allowNull : false,
link: DataTypes.STRING,allowNull : false,
artist: DataTypes.STRING,allowNull : false,
lyrics: DataTypes.TEXT,allowNull : false,
writer: DataTypes.STRING,allowNull : false,
composer: DataTypes.STRING,allowNull : false
,
charset: 'utf8', /* i add this two ligne here for generate the table with collation = 'utf8_general_ci' test it and tell me ? */
collate: 'utf8_general_ci'
);
return songs;
;
【讨论】:
以上是关于Node、Sequelize、Mysql - 如何为模型定义排序规则和字符集?的主要内容,如果未能解决你的问题,请参考以下文章
Node、Sequelize、Mysql - 如何为模型定义排序规则和字符集?
多张图片 + Node.js + Sequelize + Mysql
如何在 Node.js 中使用 Sequelize 运行 AND 和 Or 运算符
Sequelize 无法从 Node/express 应用程序同步到 docker 容器中的 MySQL (ECONNREFUSED)