我如何防止Knex在PostgreSQL上插入尾随空格?
我使用Node
和包pg
和Knex
在PostgreSQL
上插入数据。 这是我的源代码:
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)
。