Russian Qt Forum
Ноябрь 22, 2024, 06:59
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
Базы данных
>
[РЕШЕНО] MySQL: SIGNED -> UNSIGNED
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: [РЕШЕНО] MySQL: SIGNED -> UNSIGNED (Прочитано 6676 раз)
PinkPanther
Самовар
Offline
Сообщений: 169
[РЕШЕНО] MySQL: SIGNED -> UNSIGNED
«
:
Апрель 29, 2015, 20:01 »
Когда-то давно в MySQL была создана таблица, которая копит статистику. В ней скопилось около 45 миллионов строк.
Проблема в том, что одно из полей было создано как INT(11), диапазон значений без знака - 31 бит, и бит на минус. Тогда казалось, что этого хватит в запасом, оказалось - нет.
За несколько лет значения выросли до 32 бит без знака, и в таблицу стали ложиться ID вроде -245682794 (автоматически преобразованные сервером из больших SIGNED).
А нужно UNSIGNED, 4 байта, притом как можно быстрее. Попытка создать временную таблицу и запилить туда минусовые значения приводит к ошибке (дублирование значения 0 для уникального столбца - видимо, автоматическое преобразование назад не работает).
Вопрос:
Как преобразовать минусовые значения и получить ID в том виде, как он выглядел до автоматического преобразования в SIGNED сервером?
Можно ли это сделать средствами запроса MySQL? Попытка использовать CAST приводит к преобразованию в BIGINT (64 бита), что совсем не нужно.
В принципе, можно сделать это и скриптом PHP. Подскажите пожалуйста, как вычислить исходное значение?
«
Последнее редактирование: Апрель 30, 2015, 05:25 от PinkPanther
»
Записан
Эвтаназия - наше хобби!
PinkPanther
Самовар
Offline
Сообщений: 169
Re: MySQL: SIGNED -> UNSIGNED
«
Ответ #1 :
Апрель 30, 2015, 05:25 »
abc2 - пустая таблица с UNSIGNED столбцом
abc - полная таблица с SIGNED столбцом
x - столбец со значениями, испорченными знаком
INSERT INTO abc2 (id, x, y, x) SELECT id, x+4294967296, y, z FROM abc WHERE x < 0
Записан
Эвтаназия - наше хобби!
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...