#string #sqlite #types
#строка #sqlite #типы
Вопрос:
Я создал таблицу следующим образом:
create table employers (
id integer primary key,
name string,
surname string,
description string
);
Здесь я заметил, что string
это не относится к типам данных, должен ли я заменить это чем-то другим? Является ли это псевдонимом для какого-либо другого типа данных? Какое максимальное количество символов может содержать эта строка?
Я использовал string
, и это не создает никаких проблем. Меня интересует только, как это возможно, что я мог бы использовать string. Это какой-то псевдоним? Каковы возможности этого типа?
Спасибо
Ответ №1:
Вы хотите использовать ТЕКСТ, который мы используем независимо от того, что ему нужно для хранения ваших данных.
CREATE TABLE Employers (
id INTEGER PRIMARY KEY,
name TEXT,
surname TEXT,
description TEXT
);
Смотрите http://www.sqlite.org/datatype3.html и обратите внимание:
В SQLite используется более общая система динамических типов. В SQLite тип данных значения связан с самим значением, а не с его контейнером. Система динамических типов в SQLite обратно совместима с более распространенными системами статических типов других СУБД в том смысле, что инструкции SQL, которые работают со статически типизированными базами данных, должны работать таким же образом в SQLite. Однако динамическая типизация в SQLite позволяет ему делать то, что невозможно в традиционных базах данных с жесткой типизацией.
Это отмечено:
SQLite не накладывает никаких ограничений на длину (кроме большого глобального ограничения SQLITE_MAX_LENGTH) на длину строк, больших двоичных объектов или числовых значений.
Наконец:
Максимальная длина строки или большого двоичного объекта
Максимальное количество байтов в строке или большом двоичном объекте в SQLite определяется макрокомандой препроцессора SQLITE_MAX_LENGTH. Значение по умолчанию для этого макроса равно 1 миллиарду (1 тысяча миллионов или 1 000 000 000).Вы можете увеличить или уменьшить это значение во время компиляции, используя параметр командной строки, подобный этому:
-DSQLITE_MAX_LENGTH=123456789 Текущая реализация будет поддерживать только строку или большой двоичный объект длиной до 231-1 или 2147483647. И некоторые встроенные функции, такие как hex(), могут завершиться сбоем задолго до этого момента. В приложениях, чувствительных к безопасности, лучше не пытаться увеличить максимальную длину строки и большого двоичного объекта. На самом деле, вам не мешало бы уменьшить максимальную длину строки и большого двоичного объекта до чего-то большего в диапазоне нескольких миллионов, если это возможно.
Во время части обработки SQLite INSERT и SELECT полное содержимое каждой строки в базе данных кодируется как один большой двоичный объект. Таким образом, параметр SQLITE_MAX_LENGTH также определяет максимальное количество байтов в строке.
Максимальная длина строки или большого двоичного объекта может быть уменьшена во время выполнения с помощью интерфейса sqlite3_limit (db, SQLITE_LIMIT_LENGTH, size).
Комментарии:
1. Как насчет VARCHAR — эквивалентен ли он на 100% ТЕКСТУ в SQLite? Я стремлюсь максимально унифицировать код SQL (включая DDL) для MySQL и SQLite без побочных эффектов.
Ответ №2:
Объявите свое поле как «ТЕКСТ», и я полагаю, вы можете указать ограничение по длине.
таким образом, вы можете объявить ТЕКСТ имени (255) как текстовое значение из 255 символов.
Комментарии:
1. Отлично, это так просто. Почему эту информацию так трудно найти. Спасибо.
2. На самом деле в SQLite3 текст (255) не дает вам никакой проверки длины, что означает, что вы все еще можете хранить более 255 символов.