首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >KnexJS字符编码

KnexJS字符编码
EN

Stack Overflow用户
提问于 2018-01-12 21:42:50
回答 1查看 1.2K关注 0票数 1

我的问题是,是否可以以某种方式将KnexJS的字符编码更改为utf8mb4。它似乎默认使用utf8。

当我尝试在NodeJS服务器上的当前KnexJS版本上创建表时,请通过

代码语言:javascript
复制
db.schema.createTable('testtable', table => {
  table.increments('id');
  table.string('foo').unique();
});

KnexJS抛出一个错误,指出指定的键太长。这是因为KnexJS的varchar长度缺省为255。utf8mb4字段的最大长度为191个字符。

是否有一个选项可以告诉KnexJS使用哪种字符编码(从而将varchar字段的长度更改为191),或者我是否必须通过将每个varchar字段作为第二个参数传递到table.string(..., 191)来将其长度设置为191

错误消息:

代码语言:javascript
复制
Error creating testtable table { Error: Specified key was too long; max key length is 767 bytes
at Packet.asError (C:\Users\nicoe\WebstormProjects\worktrackr\backend\node_modules\mysql2\lib\packets\packet.js:713:13)
at Query.Command.execute (C:\Users\nicoe\WebstormProjects\worktrackr\backend\node_modules\mysql2\lib\commands\command.js:28:22)
at Connection.handlePacket (C:\Users\nicoe\WebstormProjects\worktrackr\backend\node_modules\mysql2\lib\connection.js:515:28)
at PacketParser.onPacket (C:\Users\nicoe\WebstormProjects\worktrackr\backend\node_modules\mysql2\lib\connection.js:94:16)
at PacketParser.executeStart (C:\Users\nicoe\WebstormProjects\worktrackr\backend\node_modules\mysql2\lib\packet_parser.js:77:14)
at Socket.<anonymous> (C:\Users\nicoe\WebstormProjects\worktrackr\backend\node_modules\mysql2\lib\connection.js:102:29)
at Socket.emit (events.js:159:13)
at addChunk (_stream_readable.js:265:12)
at readableAddChunk (_stream_readable.js:252:11)
at Socket.Readable.push (_stream_readable.js:209:10)
at TCP.onread (net.js:598:20)


code: 'ER_TOO_LONG_KEY',
  errno: 1071,
  sqlState: '42000',
  sqlMessage: 'Specified key was too long; max key length is 767 bytes' }
EN

回答 1

Stack Overflow用户

发布于 2018-01-12 22:17:53

这不是knex的错误,你会得到这个错误。这是因为您正在创建长度为255的字符串列,如果不传递任何参数,则默认长度为255。

您可以通过以下方式更改列的默认长度:

代码语言:javascript
复制
db.schema.createTable('testtable', table => {
  table.increments('id');
  table.string('foo', 300).unique(); // 300 length
});

或者,如果你想存储非常大的文本,你可以使用:

代码语言:javascript
复制
db.schema.createTable('testtable', table => {
  table.increments('id');
  table.text('foo').unique();
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48227499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档