Чтобы понять , почему связывает имя таблицы (или столбца), не работает, вы должны понимать, как работают заполнители в подготовленных операциях: они не просто заменяются как строки (соответственно экранированные) , и результат SQL выполнен. Вместо этого СУБД, попросившая «подготовить» заявление, содержит полный план запросов о том, как он будет выполнять этот запрос, включая те таблицы и индексы, которые он будет использовать, которые будут одинаковыми независимо от того, как вы заполняете заполнители.
План для SELECT name FROM my_table WHERE id = :value
будет таким же, как вы его замените :value
, но похожее подобное SELECT name FROM :table WHERE id = :value
невозможно спланировать, потому что СУБД не знает, какую таблицу вы собираетесь выбрать from.
Это не то, что библиотека абстракции, такая как PDO, может или должна работать, либо потому, что она победит две ключевые цели подготовленных операторов: 1) позволить базе данных заранее решить, как запрос будет запущен и будет использовать один и тот же план несколько раз; и 2) для предотвращения проблем безопасности путем отделения логики запроса от ввода переменной.
, что такое "строка Unicode" в Python? Это означает UCS-2?
строки Unicode в Python хранятся внутренне любой как UCS-2 (фиксированная длина 16-разрядное представление, почти то же как UTF-16) или UCS-4/UTF-32 (фиксированная длина 32-разрядное представление). Это - опция времени компиляции; в Windows это - всегда UTF-16, пока много дистрибутивов Linux устанавливают UTF-32 (вЂwide mode’) для их версий Python.
Вы, как обычно предполагается, не заботитесь: Вы будете рассматривать кодовые точки Unicode как единственные элементы в Ваших строках, и Вы не будете знать, хранятся ли они как два или четыре байта. Если Вы находитесь в сборке UTF-16, и необходимо обработать символы вне Основной Многоязычной Плоскости, Вы будете Делать Ее Неправильно, но это все еще очень редко, и пользователи, которым действительно нужны дополнительные символы, должны компилировать широкие сборки.
плоскость неправильно, или это?
Да, это довольно неправильно. Для ярмарки, я думаю, что учебное руководство довольно старо; это, вероятно, предшествует широким строкам Unicode, если не Unicode 3.1 (версия, которая представила символы вне Основной Многоязычной Плоскости).
существует дополнительный источник беспорядка, происходящего от привычки Windows к использованию термина “Unicode” для значения, а именно, кодирование UTF-16LE, которое NT использует внутренне. Люди от Microsoftland могут часто копировать эту несколько вводящую в заблуждение привычку.
Python хранит Unicode как UTF-16. str () возвратит представление UTF-8 строки UTF-16.
Между тем я провел усовершенствованное исследование для проверки то, что внутреннее представление в Python, и также каковы его пределы". Истина О Unicode В Python " является очень хорошей статьей, которая цитирует непосредственно от разработчиков Python. По-видимому, внутреннее представление является или UCS-2 или UCS-4 в зависимости от переключателя времени компиляции. Так Jon, это не UTF-16, но Ваш ответ поместил меня на правильном пути так или иначе, спасибо.
UTF-8 (8-разрядный UCS/формат преобразования Unicode) кодировка символов переменной длины для Unicode. Это в состоянии представить любой символ в стандарте Unicode , все же начальное кодирование кодов байта и символьных присвоений для UTF-8 назад совместимо с ASCII. По этим причинам это постоянно становится предпочтительным кодированием для электронной почты, веб-страницы [1], и другие места, где символы хранятся или передаются потоком.
Так, это где угодно между одним и четырьмя байтами, в зависимости от которого символа Вы хотите представить в области Unicode.
В вычислении, Unicode является промышленным стандартом, позволяющим компьютеры последовательно представлять и управлять текстом, выраженным в [1 110] большинство систем письменности в мире .
, Таким образом, это в состоянии представить большинство (но не все) систем письменности в мире.
я надеюсь, что это помогает:)
поэтому, что такое "строка Unicode" в Python?
Python 'знает', что Ваша строка является Unicode. Следовательно, если Вы сделаете regex на нем, это будет знать, который является символом и который не является и т.д., который действительно полезен. Если Вы сделали strlen, он также даст корректный результат. Поскольку пример, если Вы действительно представляли в виде строки, рассчитывает Привет, Вы доберетесь 5 (даже если это будет Unicode). Но если Вы провели строковый подсчет иностранного слова, и та строка не была строкой Unicode, чем у Вас будет намного больший результат. Pythong использует информационную форму База данных Символа Unicode для идентификации каждого символа в Строке Unicode. Надежда, которая помогает.
"case class extension should be avoided
". можно ли объяснить почему, @bajohns?
– Kevin Meredith
23 December 2016 в 13:46