【问题标题】:Query failed: ERROR: invalid byte sequence for encoding "UTF8": 0x91查询失败:错误:编码“UTF8”的字节序列无效:0x91
【发布时间】:2015-05-28 07:42:50
【问题描述】:

我一直在尝试创建此表,但不断收到以下错误

查询失败:错误:编码“UTF8”的字节序列无效:0x91

我一直在使用的代码是:

CREATE TABLE test (
  clientNo     CHAR(4) NOT NULL,
  onDate       DATE,
  atTime       TIME,
  instructorID CHAR(4) NOT NULL,    
  centreID     CHAR(4) NOT NULL,
  status       CHAR(4) CHECK ( status IN ('Fail', ‘Pass’, ‘null’) ),
  reason       VARCHAR(30),
       PRIMARY KEY (clientNo, onDate, atTime),       
       FOREIGN KEY (clientNo) REFERENCES client (clientNo)
                ON UPDATE CASCADE
                ON DELETE CASCADE,
       FOREIGN KEY (instructorID) REFERENCES instructor (instructorID)
                ON UPDATE CASCADE
                ON DELETE CASCADE,
       FOREIGN KEY (centreID) REFERENCES centre (centreID)
                ON UPDATE CASCADE,
       CONSTRAINT testConstraints UNIQUE (instructorID, onDate, atTime)
);

【问题讨论】:

  • FWIW: ‘Pass’ 看起来很不对劲。使用真正的 text 编辑器,而不是文字/文档编辑器(因为它们喜欢玩花哨的把戏)。由于错误本身抱怨编码我首先通过将文本保存为 ASCII 来清理文本(真正的文本编辑器也允许这样做)并在将文件粘贴到 PG 之前重新加载文件。

标签: database postgresql ddl create-table


【解决方案1】:

这里有两个问题:

  1. 您发送的 PostgreSQL Windows CP-1252 编码文本需要 UTF-8,因此出现“无效字节序列”错误。
  2. 您试图用“花式”引号而不是 SQL 所需的 ' 来引用字符串文字。请注意, 在 Windows CP-1252 编码中为 0x91。

两个错误在同一个地方,可以通过替换来解决:

status IN ('Fail', ‘Pass’, ‘null’)

status IN ('Fail', 'Pass', 'null')

当然,这假设 'null' 是您的 status 列的有效值。如果你真的是说null,那么你会想要:

status is null or status in ('Fail', 'Pass')

【讨论】:

  • 谢谢!纠正你提到的两个问题肯定解决了这个错误。有两件事要学习,永远不要用单词编码,两件事要小心引号。
【解决方案2】:

除了@user286 和@mu 指出的明显拼写错误和编码问题外,您对char(4) 的使用和虚假大写是可疑的。

关于字符串数据类型:

要解决编码问题,请尝试在您的会话中:

SET client_encoding TO WIN1252;

以一种或另一种方式使设置永久化。取决于你的需要。这个答案展示了几种可能性:

正确的CREATE TABLE 脚本可能如下所示:

CREATE TABLE test (
   test_id       serial PRIMARY KEY
,  client_no     int NOT NULL  -- or varchar(4)?
,  ts            timestamp
,  instructor_id int NOT NULL    
,  centre_id     int NOT NULL
,  status        boolean
,  reason        varchar(30)
,  CONSTRAINT test_client_ts_uni UNIQUE (client_no, ts)
,  FOREIGN KEY (client_no) REFERENCES client (client_no)
            ON UPDATE CASCADE ON DELETE CASCADE
,  FOREIGN KEY (instructor_id) REFERENCES instructor (instructor_id)
            ON UPDATE CASCADE ON DELETE CASCADE
,  FOREIGN KEY (centre_id) REFERENCES centre (centre_id)
            ON UPDATE CASCADE
,  CONSTRAINT test_instr_ts_uni UNIQUE (instructor_id, ts)
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 2022-01-26
    • 1970-01-01
    • 2011-06-19
    相关资源
    最近更新 更多