Я любитель Python/SQLite/Tkinter, работаю полный рабочий день в течение 6 лет, и такого раньше никогда не случалось. Но недавно я начал использовать новую версию SQLite CLI и, возможно, это первая попытка вставить более 255 символов с момента внесения изменений.
Я попробовал вставить то же содержимое буфера обмена в свой редактор, без проблем, и в ту же версию CMD, когда на ней не запущен инструмент SQLite, тоже без проблем. Та же история с Powershell.
Вот что я скопировал с помощью CTRL-C:
CREATE TABLE repositories_links (repositories_links_id INTEGER PRIMARY KEY, repository_type_id INTEGER DEFAULT null, source_id INTEGER DEFAULT null, citation_id INTEGER DEFAULT null, repository_id INTEGER DEFAULT null, locator_id INTEGER DEFAULT null, media_id INTEGER DEFAULT null, contact_id INTEGER DEFAULT null, FOREIGN KEY (repository_type_id) REFERENCES repository_type (repository_type_id), FOREIGN KEY (source_id) REFERENCES source (source_id), FOREIGN KEY (citation_id) REFERENCES citation (citation_id), FOREIGN KEY (repository_id) REFERENCES repository (repository_id), FOREIGN KEY (locator_id) REFERENCES locator (locator_id), FOREIGN KEY (media_id) REFERENCES media (media_id), FOREIGN KEY (contact_id) REFERENCES contact (contact_id));
И вот все, что вставляется в CLI SQLite:
sqlite> CREATE TABLE repositories_links (repositories_links_id INTEGER PRIMARY KEY, repository_type_id INTEGER DEFAULT null, source_id INTEGER DEFAULT null, citation_id INTEGER DEFAULT null, repository_id INTEGER DEFAULT null, locator_id INTEGER DEFAULT null, me
Я попытался перезапустить SQLite CLI, попытался поискать в Google проблему, но есть так много ссылок на 255 символов, которые нужно пройти. Может быть, кто-нибудь подскажет мне, с чего начать, я не настоящий программист и мало что знаю о Windows.
Я использую Windows 11 на 64-битной машине. Вот информация о версии инструмента SQLite:
SQLite version 3.45.1 2024-01-30 16:01:20 (UTF-16 console I/O)
До этого я много лет использовал более старую версию SQLite и никогда не сталкивался с подобной проблемой ни на этом, ни на каком-либо другом компьютере.
Обычно я не вставляю что-либо в SQLite, но это позволяет экономить на вводе текста, когда SQLite заставляет меня воссоздавать всю таблицу только для удаления некоторых столбцов, и я делаю много корректировок схемы. SQLite еще никогда меня не подводил.





Я не очень многое понял из того, что было сказано по поводу этой проблемы здесь и здесь, но сумел использовать их обходной путь, не придя к пониманию того, почему это происходит только внутри SQLite CLI.
Я скачал cbecho.exe из его репозитория и добавил каталог в PATH.
Я вставил длинную команду SQLite (см. исходный вопрос) в редактор и внес изменения. Скопировал это в буфер обмена, а затем для запуска команды в SQLite CLI вместо CTRL-V и Enter я набрал следующее:
.read "|cbecho -c"
Текст в буфере обмена не появился в CLI, но команда выполнилась.
Мне все еще хотелось бы знать, почему этот предел вставки в 255 символов возникает в интерфейсе командной строки SQLite, а не в простой командной строке cmd или Powershell. Аргументы на связанном форуме SQLite, похоже, указывают (но это не для меня), что это ограничение Windows, а не ограничение SQLite, но я не вижу никаких доказательств этого в том, как все работает у меня.
Вот лучший обходной путь, предложенный здесь Уорреном Янгом. Сообщения в этом источнике также технически объясняют, почему эта проблема не вызвана какими-либо действиями SQLite.
В Windows есть три инструмента CLI: cmd.exe, Powershell и тот, о котором я забыл из-за его плохого поведения: Терминал.
Терминал — лучшее решение, потому что я могу вставить всю команду SQLite create table, все отображается, я могу ее редактировать, и когда я нажимаю Enter, команда выполняется как положено. Это больше не работает в cmd.exe или Powershell в моей последней версии Windows 11.
Причина, по которой я намеренно забыл о существовании Терминала, заключается в том, что вам нужно изменить размер окна, прежде чем вводить в него текст, например, если вы собираетесь попытаться отобразить большую таблицу. В отличие от более новых версий cmd.exe, вы не можете повторно отобразить содержимое предыдущего вывода, растянутое по большему окну с измененным размером, вручную изменив размер окна. Хуже того, после расширения окна командная строка (начинается с sqlite>) остается там, где должна быть, но все, что вы в нее вводите, отображается среди предыдущего вывода. Вы можете продолжать вводить текст, команды будут работать, но чтобы они отображались правильно, вам придется закрыть вкладку и начать все сначала на новой вкладке. И не забудьте изменить размер окна, прежде чем что-либо печатать.
Тем не менее, использование терминала для этой единственной задачи SQLite — редактирования длинных схем, что я делаю, когда мне нужно удалить столбцы из существующей таблицы — является лучшим обходным решением.
Я только что узнал, что вы также не можете вводить более 255 символов в cmd.exe, когда запущен инструмент SQLite. Решение то же самое.
Если подумать, более вероятно, что Windows 11 понизила свои возможности в обновлении, чем SQLite понизил свои возможности.