SQLite, символы ASCII от 0x20 до 0x7E Проверьте ограничение - PullRequest
1 голос
/ 17 февраля 2020

У меня есть следующая таблица, в которой я пытаюсь ограничить имя столбца символами ASCII в диапазоне от 0x20 до 0x7E (все печатные символы 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"); 

Ожидается: следует добавить в таблицу штрих с именем: "Том" (только для вставленного имени). состоит из печатных символов ASCII). Результат: проверка содержимого не пройдена: тест

1 Ответ

1 голос
/ 17 февраля 2020

Обратные слеши не являются специальными в SQL строках. «\ x20» - это 4 отдельных символа, например, не один экранированный. Таким образом, ваш шаблон GLOB всегда совпадает (поскольку T не является символом в наборе), и NOT делает его, и, следовательно, ограничение, неудачным.

...