我如何防止Knex在PostgreSQL上插入尾随空格?

我使用Node和包pgKnexPostgreSQL上插入数据。 这是我的源代码:

 var knex = require('knex')({ client: 'pg', connection: 'postgres://postgres:52Ag98d5@localhost:5433/CRM' }); var rows = []; for(var i = 0; i < 20000; i++) { rows.push({ name: faker.Name.findName(), email: faker.Internet.email() }); } knex.batchInsert('contact', rows) .then(() => { knex.destroy(); }); 

它工作的很好,除了string字段被填充尾部空格。 我的意思是…如果一个字段是character(50) ,我用10个字符填充它,它将在最后插入40个空格。 请参阅pgAdmin上的亮点:

图片

我不知道这是谁的错。 我不知道这是因为Knex还是因为Node pg驱动程序。

任何意识如何防止这种行为?

理由很简单。 Character(50)是固定长度的数据types。

字符数据types :

 ╔════════════════════════╦════════════════════════════╗ ║ Name ║ Description ║ ╠════════════════════════╬════════════════════════════╣ ║ character(n), char(n) ║ fixed-length, blank padded ║ ╚════════════════════════╩════════════════════════════╝ 

如果要存储的string比声明的长度短,则types字符的值将被空格填充; 字符变化types的值将简单地存储较短的string。

解:

改用VARCHAR(50)