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 注入。不是我想要的代码,我想成为可靠和面向未来的代码。但对于某些用例,这可能是可以接受的。 显然,collat​​e 是非法的,它应该只是字符集【参考方案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操作MySQL

如何在 Node.js 中使用 Sequelize 运行 AND 和 Or 运算符

Sequelize 无法从 Node/express 应用程序同步到 docker 容器中的 MySQL (ECONNREFUSED)

如何在 mysql Sequelize 实例中拥有数组的数据类型?