2010-12-14 3 views

ответ

13

Этот вопрос не имеет смысла в контексте SQLite, поскольку он поддерживает только один тип поля TEXT. Различия «фиксированной ширины» и «переменной длины» здесь не существует.

Хотя SQLite позволит вам определить, что поле имеет определенный тип, все это делает (самое большее) задает предпочтение этого поля для типа, используемого при хранении неоднозначных данных (например, будет ли «3» сохранено как INTEGER, REAL или TEXT). Вы все равно можете хранить любые данные в любом SQLite-поле независимо от его типа.

В частности, относящиеся к CHAR против VARCHAR, http://www.sqlite.org/datatype3.html говорит нам:

Если объявленный тип столбца содержит любой из строк «CHAR», «CLOB », или «TEXT», то, что column имеет TEXT сходство. Обратите внимание, что тип VARCHAR содержит строку «CHAR» и , таким образом, присваивает TEXT-сродство.

+0

Но я мог бы также удалить все столбцы text/varchar/char из таблицы. Тогда будет фиксированная ширина. Мои вопросы касаются того, позволит ли это ускорить поиск столбца (кроме его небольшого размера). – David

+5

Нет, это не так. Как поясняется связанным документом, SQLite использует динамические типы полей. Даже если вы объявляете поле INTEGER, вы все равно можете хранить в нем поплавки, текст или даже капли. Объявление «INTEGER» дает этому полю предпочтение хранить данные как целые числа, но не ограничивает его. Он все равно будет столбцом/записью переменной ширины. (И это даже игнорирует детали, что INTEGER не имеет фиксированного размера в SQLite) –

5

Только с SQLite uses variable-length records, я бы предположил, что они не реализовали оптимизацию поиска по ширине, когда строки имеют одинаковую длину.

И как указал Дейв, все еще можно хранить текст в полях INT. Начиная с SQLite never truncates data, это означает, что SQLite разрешает, по-видимому, фиксированный столбец ширины, например INT, для хранения данных переменной длины. Таким образом, невозможно реализовать оптимизацию поиска по фиксированной ширине.