【问题标题】:How to define an NVARCHAR(MAX) field with sequelize?如何用 sequelize 定义 NVARCHAR(MAX) 字段?
【发布时间】:2018-02-06 19:06:35
【问题描述】:

使用 node.js 和 sequelize vis-a-vis MSSQL,如何定义 NVARCHAR(MAX) 字段?

【问题讨论】:

  • 在 MSSQL 中转换数据项将是: convert(varchar(max),field) as field - 使用 max 不是很好的做法,但是如果在关联的 MS 产品中使用,它只能作为文本使用喜欢访问 - 我会尽可能将可用字符限制为最多 255 个
  • 谢谢,但我特别需要 nvarchar(max) (用于存储 JSON)

标签: sql-server node.js sequelize.js


【解决方案1】:

如果您在 Sequelize 中将数据类型指定为 TEXT 它会自动将该字段转换为 SQL Server 数据库的NVARCHAR(MAX)。

我在文档中找不到这个

但是在Sequelize github repository第79行到第90行中提到了。

这里粘贴代码sn-p:

    TEXT.prototype.toSql = function toSql() {
    // TEXT is deprecated in mssql and it would normally be saved as a non-unicode string.
    // Using unicode is just future proof
    if (this._length) {
      if (this._length.toLowerCase() === 'tiny') { // tiny = 2^8
        warn('MSSQL does not support TEXT with the `length` = `tiny` option. `NVARCHAR(256)` will be used instead.');
        return 'NVARCHAR(256)';
      }
      warn('MSSQL does not support TEXT with the `length` option. `NVARCHAR(MAX)` will be used instead.');
    }
    return 'NVARCHAR(MAX)';
  };

如您所见,SQL Server 不支持 TEXT 字段,因此会将其转换为 NVARCHAR(MAX)

【讨论】:

    【解决方案2】:

    只需使用Sequelize.STRING('MAX') 作为类型

    【讨论】:

    • 不,不工作:ERROR: syntax error at or near "MAX" ("sequelize": "4.41.1")
    【解决方案3】:

    对于 MYSQL:DataTypes.STRING(65535)

    postgres 支持高达 1G 的 TEXT 和 VARCHAR。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-07
      • 2013-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多