Вставка числа в виде строки в столбец текста и SQLite удаляет ведущий ноль - PullRequest
9 голосов
/ 13 октября 2010

Я получил следующий номер в виде строки: String numberString = "079674839";

Когда я вставляю это число в БД SQLite, SQLite автоматически удаляет начальный ноль и сохраняет строку как 79674839. Учитывая сходство и то, что столбец хранит TEXT, разве SQLite не должен хранить всю строку и сохранять ведущий ноль?

Спасибо

Ответы [ 2 ]

8 голосов
/ 31 июля 2011

Дважды проверьте схему базы данных.Как описано в Типы данных в SQLite версии 3 , имя типа столбца влияет на то, как обрабатываются значения перед сохранением.

Вот программа Python для демонстрации с использованием базы данных в памяти:

import sqlite3

db = sqlite3.connect(':memory:')
val = "0796";
db.execute('CREATE TABLE test (i INTEGER, r REAL, t TEXT, b BLOB);')
db.execute('INSERT INTO test VALUES (?, ?, ?, ?);', (val, val, val, val))
res = db.execute('SELECT * FROM test');
print '\t'.join([x[0] for x in res.description])
for row in res.fetchall():
    print '\t'.join([repr(x) for x in row])

Вывод:

i    r      t       b
796  796.0  u'0796' u'0796'

Итак, похоже, что ваш столбец на самом деле является целочисленным типом.Взгляните на определение схемы (sqlite3 database.db .schema работает из командной строки), посмотрите на документацию еще раз и убедитесь, что вы используете одно из имен типов, которые соответствуют привязке TEXT.Неизвестные имена типов получают сходство INTEGER.

В моем собственном случае я использовал 'STR', что в итоге приводит к сходству INTEGER по умолчанию.Я изменил его на «ТЕКСТ», и SQLite начал уважать мои ведущие нули.

1 голос
/ 13 октября 2010

Используйте одинарные кавычки вокруг числа (т. Е. «079674839»), если оно есть где-либо во встроенном коде sql.Кроме того, если вы делаете это программно, убедитесь, что вы не проходите числовое преобразование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...