SQLite не возвращает такой ошибки столбца в имени атрибута при вводе имени, но работает при копировании из оператора create - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть SQL-запрос в SQLite, который включает имена столбцов с символами подчеркивания _.У меня проблема при вводе имени столбца (Nom_ligne) в запрос (я получаю SQL error: no such column).Мне удалось заставить мой запрос работать, когда я скопировал и вставил имя столбца непосредственно в запрос после использования PRAGMA table_info.Они выглядят одинаково для меня, но Notepad ++ не распознает имя столбца как идентичное (он выделяет все вхождения одного и того же набора символов при нажатии на набор символов).

У меня найдено , что есть два разных типа символов подчеркивания, которые выглядят одинаково.Как я могу выбрать, чтобы ввести правильный?Это проблема с моими строками кода (см. Ниже)?

enter image description here

Здесь мои строки кода с различными символами.

> #this works 
SELECT train_arret.stop_name FROM train_arret_ligne, lignes_train, train_arret WHERE
train_arret.stop_code_=train_arret_ligne.ID_arret AND
train_arret_ligne.ligne_code=lignes_train.ID_ligne AND
lignes_train.Nom_ligne="Candiac"
> 
##returns error SQL error: "no such column: lignes_train.Nom_ligne" 
SELECT train_arret.stop_name FROM train_arret_ligne, lignes_train,
train_arret WHERE train_arret.stop_code_=train_arret_ligne.ID_arret
AND train_arret_ligne.ligne_code=lignes_train.ID_ligne AND
lignes_train.Nom_ligne="Candiac"
> 
> #these work 
SELECT lignes_train.ID_ligne FROM lignes_train WHERE             
lignes_train.Nom_ligne="Candiac"

РЕДАКТИРОВАТЬ:

Я набрал это с нуля (без копирования-вставки), и я получаю ошибку.

SELECT train_arret.stop_name FROM train_arret_ligne, lignes_train, train_arret
WHERE train_arret.stop_code_=train_arret_ligne.ID_arret AND
train_arret_ligne.ligne_code=lignes_train.ID_ligne AND
lignes_train.Nom_ligne="Candiac"

БОЛЬШЕ РЕДАКТИРОВАТЬ:

Когда я копирую строки кода через шестнадцатеричный редактор FlexHEX, я обнаруживаю, что дополнительный скрытый символ EF BB BF необходим для получения кода вработать в запросе SQL.Я также могу обнаружить дополнительный символ в SQLITE / SPATIALLITE, когда я перемещаюсь по тексту.Это выглядит следующим образом в FlexHEX:

#doesn't work
lignes_train.ID_ligne 
#works
lignes_train.ID_ligne

Вот что я получаю, когда я прошу SQLITE / SPATIALLITE показать мне оператор create

CREATE TABLE "lignes_train" (
"PK_UID" INTEGER PRIMARY KEY AUTOINCREMENT,
"ID_ligne" INTEGER,
"Nom_ligne" TEXT)

1 Ответ

0 голосов
/ 11 февраля 2019

Взяв одно из имен столбцов, которое не выдает ошибку:

$ echo 'lignes_train.Nom_ligne' | xxd
00000000: 6c69 676e 6573 5f74 7261 696e 2e4e 6f6d  lignes_train.Nom
00000010: 5f6c 6967 6e65 0a                        _ligne

Имя столбца, которое выдает ошибку:

$ echo 'lignes_train.<feff>Nom_ligne' | xxd
00000000: 6c69 676e 6573 5f74 7261 696e 2eef bbbf  lignes_train....
00000010: 4e6f 6d5f 6c69 676e 650a                 Nom_ligne.

Как видите, дляпо какой-то причине есть три дополнительных байта, EF BB BF между периодом и именем столбца.Эти байты не являются допустимыми символами в кодировке UTF-8, поэтому в моей оболочке отображаются как <feff>.Я понятия не имею, почему ваш редактор не делает что-то подобное (если вы говорите ему использовать UTF-8 для этого буфера, который, поскольку это кодировка текста по умолчанию, используемая в sqlite, вам действительно следует ... I 'Я также удивлен, что ТАК не указывает их).Это причина ошибки.Символ подчеркивания, U+005F одинаков для обоих.

Кредит должен перейти к @Cid для его поиска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...