首页 > 解决方案 > 在 postgres 中插入编码密码时出错

问题描述

我创建了这个 psql 表代码:

CREATE TABLE admin (id INT NOT NULL, username VARCHAR(180) NOT NULL, roles JSON NOT NULL, password VARCHAR(255) NOT NULL, PRIMARY KEY(id))');

接着

INSERT INTO admin (id, username, roles, password) VALUES (nextval('admin_id_seq'), 'admin', '["ROLE_ADMIN"]', '$argon2id$v=19$m=65536,t=4,p=1$Kcm6sv104bqBtb+FEh+dDQ$caej4aGFAYMvBqKNHgFAGw6+1rua1Iwk/g09mYbOCLMx’);

我在终端上没有一个错误,但表上有 0 行,我错过了任何代码吗?

标签: postgresqlsql-insertpsqlstring-literals

解决方案


如果您仔细查看您的值(以下截断!),您会发现最后一个单引号实际上是“右单引号”(U+2019)而不是“单引号”/“撇号”(U +0027),而所有其他引号都是撇号,因为它们应该是。

 (nextval('admin_id_seq'), 'admin', '["ROLE_ADMIN"]', '$argon2id$v=19$...’)
                                                                         ^-- this one

如果你仔细观察,你会发现它甚至看起来不一样。您可以放大以更轻松地查看差异。

解决方案是用撇号/单引号 (U+0027) 替换最后一个:

INSERT INTO admin (id, username, roles, password) VALUES (nextval('admin_id_seq'), 'admin', '["ROLE_ADMIN"]', '$argon2id$v=19$m=65536,t=4,p=1$Kcm6sv104bqBtb+FEh+dDQ$caej4aGFAYMvBqKNHgFAGw6+1rua1Iwk/g09mYbOCLMx');

推荐阅读