Строковый тип данных в sqlite

#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 символов.