Базы данных

SQLite, SQLiteStudio и отображение больших чисел в поле типа string в виде числа с плавающей точкой

В SQLite предусмотрено только 5 типов данных:

  • NULL. Пустое значение в таблице базы.
  • INTEGER. Целочисленное значение.
  • REAL. Числовое значение с плавающей точкой.
  • TEXT. Значение строки текста. Хранится с использованием кодировки базы данных (UTF-8, UTF-16BE или UTF-16LE).
  • BLOB. Значение бинарных данных, хранящихся точно в том же виде, в каком были введены.

Однако некоторые менеджеры, позволяющие управлять базами данных SQLite, предоставляют нам возможность «большего» выбора. Так, SQLite Studio предоставляют выбор из следующих типов данных:

  • bigint
  • blob
  • boolean
  • char
  • date
  • datetime
  • decimal
  • double
  • integer
  • int
  • none
  • numeric
  • real
  • string
  • text
  • time
  • varchar

Выходит, 17 против стандартных 5. Однако все эти 17 типов в конечном итоге приводятся все к тем же null, integer, real, text или blob. И каким образом после преобразования будут выглядеть данные решает SQLite, а не вы.

Например, в SQLite нет типа данных для хранения даты и времени. Однако есть встроенные функции SQLite для работы с этими типами данных. Для наглядности при создании столбца в разделе тип данных вы указываете datetime, но на самом деле данные будут храниться как тип данных text.

Итак, перейдем к теме. Задача: хранение кодов, состоящий из количества цифр >20, в поле базы строкового типа. Допустим, выбран тип string в SQLite Studio для решения данного вопроса:

[pastacode lang=»sql» manual=»CREATE%20TABLE%20Codes%20(%0Acode%20STRING%20(50)%20UNIQUE%20NOT%20NULL)%3B» message=»» highlight=»» provider=»manual»/]

Для строк 2222223333333333666666666999999999 и 1111111114444444444222222222333333333 в таблице вы увидете

Так, конечно же, не пойдет: код нужен целиком. Чтобы такие строки отображались корректно, необходимо использовать  тип данных text, char, varchar (которые в конечном итоге приводятся к типу данных text):

Дело в том, что тип string будет приводится к типам real или integer, если данные похожи на вещественное или целое число, соответственно. Так, строка вида ‘0147’ преобразуется в ‘147’.