SQLite,ASCII 字符 0x20 到 0x7E 检查约束

SQLite, ASCII Characters 0x20 to 0x7E Check Constraint

我有以下 table,其中我试图将列 "name" 限制为范围从 0x20 到 0x7E 的 ASCII 字符(所有 printable ASCII 字符)。为什么我的检查约束不起作用?

CREATE TABLE test
( 
    id INTEGER NOT NULL,
    name TEXT NOT NULL CHECK(name NOT GLOB '*[^\x20-\x7E]*'),
    PRIMARY KEY(id)
)

例如:

INSERT INTO test (name) VALUES("Tom"); 

预期:应将名称为 "Tom" 的元组添加到 table(因为插入的名称仅包含 printable ASCII 字符)。结果:CHECK containt failed: test

反斜杠在 SQL 字符串中并不特殊。例如,'\x20' 是 4 个单独的字符,而不是转义的单个字符。所以你的 GLOB 模式总是匹配(因为 T 不是集合中的字符),并且 NOT 使它成功,因此约束失败。