gpt4 book ai didi

mysql - KnexJS 字符编码

转载 作者:行者123 更新时间:2023-11-29 07:37:12 29 4
gpt4 key购买 nike

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

当我尝试通过以下方式在 NodeJS 服务器上的当前 KnexJS 版本中创建一个表时

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)?

错误信息:

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' }

最佳答案

您遇到该错误并不是 knex 的问题。就是你正在创建长度为 255 的字符串列,如果你不传递任何参数,这是默认值。

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

db.schema.createTable('testtable', table => {
table.increments('id');
table.string('foo', 300).unique(); // 300 length
});

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

db.schema.createTable('testtable', table => {
table.increments('id');
table.text('foo').unique();
});

关于mysql - KnexJS 字符编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48227499/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com