Oracle boolean тип данных
Типы данных MySQL
Типы данных MySQL разделяются на следующие типы:
Типы данных Oracle
Типы данных Oracle разделяются на следующие группы:
ANSI SQL стандарт распознает только текст и число, в то время как большинство коммерческих программ используют другие специальные типы, такие как DATЕ и TIME — фактически почти стандартные типы. Некоторые пакеты также поддерживают такие типы, как, например, MONEY и BINARY. Типы данных, распознаваемые с помощью ANSI, состоят из строк символов и различных типов чисел, которые могут классифицироваться как точные числа и приблизительные числа.
CHARACTER(length) определяет спецификацию строк символов, где length задает длину строк заданного типа. Значения этого типа должны быть заключены в одиночные кавычки. Большинство реализаций поддерживают строки переменной длины для типов данных VARCHAR и LONG VARCHAR (или просто LONG).
В то время, как поле типа CHAR всегда может распределить память для максимального числа символов, которое может сохраняться в поле, поле VARCHAR при любом количестве символов может распределить только определенное количество памяти, чтобы сохранить фактическое содержание поля, хотя SQL может установить некоторое дополнительное пространство памяти, чтобы следить за текущей длиной поля. Поле VARCHAR может быть любой длины, включая реализационно-определяемый максимум. Этот максимум может меняться от 254 до 2048 символов для VARCHAR и до 16000 символов для LONG. LONG обычно используется для текста пояснительного характера или для данных, которые не могут легко сжиматься в простые значения полей; VARCHAR может использоваться для любой текстовой строки, чья длина может меняться.
Извлечение и модифицирование полей VARCHAR — более сложный, и, следовательно, более медленный процесс, чем извлечение и модифицирование полей CHAR. Кроме того, некоторое количество памяти VARCHAR, остается всегда неиспользованной для гарантии вмещения всей длины строки. При использовании таких типов следует предусматривать возможность полей к объединению с другими полями.
Точные числовые типы — это числа, с десятичной точкой или без десятичной точки, которые могут представляться в виде [+|-]<целое без знака>[.<целое без знака>] и специфицироваться как:
DECIMAL(precision [, scale]) — аргумент размера имеет две части: точность и масштаб. Масштаб не может превышать точность. Точность указывает сколько значащих цифр имеет число. Масштаб указывает максимальное число цифр справа от десятичной точки. Масштаб = нулю делает поле эквивалентом целого числа.
NUMERIC(precision [, scale]) — такое же как DECIMAL за исключением того, что максимальное десятичное не может превышать аргумента точности
INTEGER — число без десятичной точки. Эквивалентно DECIMAL, но без цифр справа от десятичной точки, т.е. с масштабом равным 0. Аргумент размера не используется (он автоматически устанавливается в реализационно-зависимое значение).
SMALLINT — такое же как INTEGER, за исключением того, что, в зависимости от реализации, размер по умолчанию может ( или не может ) быть меньше чем INTEGER.
Приблизительные числовые типы — это числа в показательной (экспоненциальной по основанию 10) записи, представляемые как <литеральное значение точного числа>Е<целое со знаком> и специфицирущиеся следующим образом:
FLOAT[(precision)] — число с плавающей запятой. Аргумент размера состоит из одного числа, определяющего минимальную точность.
REAL — такое же как FLOAT, за исключением того, что никакого аргумента размера не используется. Точность устанавливается реализационно-зависимой по умолчанию.
DOUBLE PRECISION — такое же как REAL, за исключением того, что реализационно-определяемая точность для DOUBLE PRECISION должна превышать реализационно-определяемую точность REAL.
Типы данных Access
Типы данных Access разделяются на следующие группы:
Типы данных SQL Server
Microsoft SQL Server поддерживает большинство типов данных SQL 2003. Также SQL Server поддерживает дополнительные типы данных, используемые для однозначной идентификации строк данных в таблице и на многих серверах, например UNIQUEIDENTIFIER , что соответствует аппаратной философии «роста в ширину», исповедуемой Microsoft (т. е. внедрение базы на множестве серверов на платформах Intel), вместо «роста в высоту» (т. е. внедрение на одном огромном мощном UNIX-сервере или Windows Data Center Server).
Типы данных, используемые в SQL Server:
Типы данных PostgreSQL
База данных PostgreSQL поддерживает большинство типов данных SQL2003 плюс огромный набор типов для хранения пространственных и геометрических данных. PostgreSQL может похвастаться богатым набором операторов и функций, специально предназначенных для геометрических типов данных. Сюда входят такие средства, как поворот, поиск пересечений и масштабирование. В PostgreSQL также есть поддержка дополнительных версий существующих типов данных, которые характерны тем, что занимают меньше места на диске, чем соответствующие исходные версии. Например, в PostgreSQL предлагается несколько вариантов типа INTEGER для хранения больших и небольших чисел, соответственно занимающих больше или меньше места.
Таблицы могут содержать не только строки. Рассмотрим основные типы данных в БД Oracle.
Varchar2
Строковый тип. При создании таблицы всегда нужно указывать размер строки. Размер может указываться в байтах либо в символах. По-умолчанию максимальный размер строки равен 4000 байт, либо 4000 символов. Этот размер может быть изменен дополнительной настройкой БД.
Number
Числовой тип данных. Используется для хранения как целых чисел, так и дробных чисел. Тип Number может хранить положительные или отрицательные числа, размер которых ограничен 38 цифрами. Размер числового типа можно ограничивать:
Рассмотрим последний пример: rounded_price number(5, -2) . Значение -2 здесь означает, что любое дробное число, которое будет записываться в эту колонку, будет округлено, включая две предшествующих резделителю дроби цифры. Ниже показаны примеры входных чисел и числа, в которые они будут преобразованы при сохранении их в колонке rounded_price :
Тип Date предназначен для хранения даты и времени. Данный тип данных хранить в себе следующую информацию:
Не всегда бизнес-логика приложения требует хранения даты вплоть до секунды или до дня - иногда нас может интересовать лишь конкретный месяц в году, или только год. В таких случаях незначимая информация как правило устанавливается в некое начальное значение, например:
Во втором случае нас интересует только месяц и год, но мы не можем игнорировать число, поэтому мы сами решили использовать в качестве дня первый день месяца. Здесь могло быть и 3, и 30, и 20 число месяца. Просто при работе с такими колонками следует знать, для чего они используются и использовать только ту часть даты, которая должна использоваться согласно бизнес-логике.
В третьем случае дата как таковая нас вообще не интересует - нам важно знать только время, поэтому год, месяц и число можно выбрать любые. Конечно, чтобы использовать только время, нужно будет производить определенные манипуляции со значением такого столбца(например отделение значения часов и/или минут, приведение числа, месяца и года к определенным значениям, и т.п.). Также, если известно, что придется работать только определенной частью даты, можно использовать тип number. Как пример - колонка release_year , которая хранит в себе год выпуска определенной модели авто. Здесь месяц, число и время скорее всего не понадобятся совсем.
Boolean
Логического типа данных в БД Oracle нет. Но вместо него можно использовать уже знакомые типы number или varchar2 :
- значение, равное 1 трактуем как истину, иначе - ложь(или наоборот) значение, равное символу 'Y' - истинно, 'N' - ложно
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Представляет значение, возвращаемое из операции сравнения баз данных, относящихся к разным типам данных Oracle, и предоставляет другим приложениям методы для выполнения преобразований типов данных.
Комментарии
Основное различие между OracleBoolean структурой и стандартным логическим значением заключается в том, что в стандарте Boolean есть два возможных значения, true а false OracleBoolean структура имеет три возможных значения,, True False или Null .
OracleBooleanСтруктура не сопоставляется с Boolean типом данных Oracle, она предоставляется в качестве удобного класса поддержки.
Конструкторы
Выполняет инициализацию нового экземпляра структуры OracleBoolean с помощью указанного Boolean .
Выполняет инициализацию нового экземпляра структуры OracleBoolean с помощью указанного целого числа.
Представляет значение ЛОЖЬ, которое может быть присвоено свойству Value экземпляра структуры OracleBoolean.
Представляет значение NULL, которое может быть назначено свойству Value экземпляра структуры OracleBoolean.
Представляет значение 1, которое может быть присвоено свойству Value экземпляра структуры OracleBoolean.
Представляет значение ИСТИНА, которое может быть присвоено свойству Value экземпляра структуры OracleBoolean.
Представляет значение 0, которое может быть присвоено свойству Value экземпляра структуры OracleBoolean.
Свойства
Показывает, задано ли для текущего свойства Value значение False.
Показывает, является ли значение структуры OracleBoolean пустым.
Показывает, задано ли для текущего свойства Value значение True.
Получает значение структуры OracleBoolean. Это свойство доступно только для чтения.
Методы
Вычисляет результат битовой операции AND для двух указанных структур OracleBoolean.
Сравнивает данную структуру OracleBoolean с заданным объектом и возвращает сведения об их относительных значениях.
Сравнивает параметр предоставленного объекта с OracleBoolean.
Сравнивает две структуры OracleBoolean, чтобы определить, равны ли они.
Возвращает хэш-код данного экземпляра.
Сравнивает два экземпляра OracleBoolean, чтобы определить, что они не равны.
Выполняет операцию дополнения до единицы для предоставленных структур OracleBoolean.
Выполняет битовую операцию ИЛИ с двумя указанными структурами OracleBoolean.
Преобразует заданное представление логического значения String в его эквивалент OracleBoolean.
Преобразует Value в строку.
Выполняет битовую операцию исключающего логического сложения с предоставленными параметрами.
Операторы
Вычисляет результат битовой операции AND для двух указанных структур OracleBoolean.
Вычисляет результат битовой операции OR двух операндов OracleBoolean.
Сравнивает два экземпляра OracleBoolean, чтобы определить, равны ли они.
Выполняет битовую операцию исключающего логического сложения предоставленных параметров OracleBoolean.
Преобразует OracleBoolean в Boolean .
Преобразует параметр OracleNumber в структуру OracleBoolean.
Преобразует строку в структуру OracleBoolean.
Позволяет проверить значение Value параметра OracleBoolean и определить, является ли оно значением ЛОЖЬ.
Преобразует значение Boolean в OracleBoolean.
Сравнивает два экземпляра OracleBoolean на предмет их неравенства.
Выполняет операцию НЕ со структурой OracleBoolean.
Выполняет операцию дополнения до единицы с OracleBoolean.
Позволяет проверить значение Value параметра OracleBoolean и определить, не является ли оно значением ИСТИНА.
вчера я хотел добавить логическое поле в таблицу Oracle. Однако на самом деле в Oracle нет логического типа данных. Кто-нибудь здесь знает лучший способ имитировать логическое значение? В гугле субъект обнаружил несколько подходов
используйте целое число и просто не беспокойтесь о назначении ему ничего, кроме 0 или 1.
используйте поле char с " Y " или " N " в качестве единственных двух значений.
использовать перечислимый с ограничением CHECK.
знают ли опытные разработчики Oracle, какой подход является предпочтительным / каноническим?
нашел этой ссылка полезная.
вот абзац, выделяющий некоторые из плюсов / минусов каждого подхода.
наиболее часто встречающийся дизайн должен имитировать многие булевы как флаги, которые используют представления словаря данных Oracle, выбрав " Y " для true и " N " для false. Однако, чтобы правильно взаимодействовать с хостом среды, такие как JDBC, OCCI и другие среды программирования, лучше выбрать 0 для false и 1 для true, поэтому он может работать правильно с функциями getBoolean и setBoolean.
в основном они защищают Метод № 2, для эффективности, используя
- значения 0/1 (из-за совместимости с jdbc getBoolean() etc.) с ограничением проверки
- a тип CHAR (потому что он использует меньше места, чем число).
Oracle сам использует Y / N для логических значений. Для полноты следует отметить, что pl/sql имеет логический тип, это только таблицы, которые этого не делают.
Если вы используете поле, чтобы указать, нужно ли обрабатывать запись или нет, вы можете использовать Y и NULL в качестве значений. Это делает очень маленький (быстрый чтение) индекс, который занимает очень мало места.
чтобы использовать наименьшее количество пространства, вы должны использовать поле CHAR, ограниченное "Y" или "N". Oracle не поддерживает типы данных BOOLEAN, BIT или TINYINT, поэтому один байт CHAR настолько мал, насколько вы можете получить.
лучший вариант-0 и 1 (Как числа-другой ответ предлагает 0 и 1 Как CHAR для эффективности пространства, но это слишком скручено для меня), используя не NULL и контрольное ограничение, чтобы ограничить содержимое этими значениями. (Если вам нужно, чтобы столбец был nullable, то это не логическое значение, с которым вы имеете дело, а перечисление с тремя значениями. )
- независимый язык. "Y" и " N " были бы в порядке, если бы все использовали его. Но это не так. Во Франции используют " О " и " н " (я видел это собственными глазами). Я не программировал в Финляндии, чтобы посмотреть, используют ли они там " Е " и " к " - Без сомнения, они умнее, но вы не можете быть уверены.
- соответствует практике в широко используемых языках программирования (C, C++, Perl, Javascript)
- лучше играет с прикладным уровнем, например, Hibernate
- приводит к более лаконичному SQL, например, чтобы узнать, сколько бананов готовы ешь!--0--> вместо select count(*) from bananas where is_ripe = 'Y' или даже (ЮК) select sum(case is_ripe when 'Y' then 1 else 0) from bananas
преимущества 'Y' / 'N':
- занимает меньше места, чем 0/1
- это то, что предлагает Oracle, поэтому может быть то, что некоторые люди больше привыкли
другой плакат предложил " Y " / null для повышения производительности. Если ты . --6-->проверенные что вам нужна производительность, то достаточно справедливо, но в противном случае не избежать, так как это делает запрос менее натуральный ( some_column is null вместо some_column = 0 ) и в левом соединении вы будете смешивать ложность с несуществующими записями.
либо 1/0, либо Y / N с ограничением проверки на нем. эфирный способ. Я лично предпочитаю 1/0, так как я много работаю в perl, и это упрощает выполнение логических операций perl над полями базы данных.
Если вы хотите действительно углубленное обсуждение этого вопроса с одним из оракулов Head honchos, проверьте, что Том Кайт должен сказать об этом здесь
база данных, над которой я работал, использовала " Y " / " N " в качестве логических значений. С помощью этой реализации вы можете снять некоторые трюки, такие как:
подсчет строк, которые являются верными:
ВЫБЕРИТЕ SUM (СЛУЧАЙ, КОГДА BOOLEAN_FLAG = 'Y', А ЗАТЕМ 1 ЕЩЕ 0) ИЗ X
при группировании строк применяйте логику" если одна строка истинна, то все истинны":
ВЫБЕРИТЕ MAX (BOOLEAN_FLAG) ИЗ Y
И наоборот, используйте MIN для принудительного группирования false, если одна строка ложный.
рабочий пример реализации принятого ответа путем добавления столбца "Boolean" в существующую таблицу в базе данных oracle (используя number type):
это создает новый столбец в my_table_name под названием my_new_boolean_column со значениями по умолчанию 0. Столбец не принимает NULL значения и ограничивает принятые значения либо 0 или 1 .
в наших базах данных мы используем перечисление, которое гарантирует, что мы передадим его TRUE или FALSE. Если вы сделаете это одним из первых двух способов, слишком легко либо начать добавлять новое значение к целому числу, не проходя через правильный дизайн, либо закончить тем, что поле char имеет значения Y, y, N, n, T, T, F, f и нужно помнить, какой раздел кода использует какую таблицу и какую версию true он использует.
Читайте также: