#mysql #sql
#mysql #sql
Вопрос:
У нас есть поле, которое хранит данные (например, 1, 0) в tinyint
(1) столбце, и я должен переместить это в text
столбец, и простое преобразование сохраняет данные в текстовом поле с дополнительными пробелами вместо просто 1 или 0. Как я должен это сделать правильно?
create table A (id, foo tinyint(1));
create table B (id, bar text);
Я пытаюсь скопировать все элементы A в B, используя insert into B (id, bar) select id, foo from A;
, что вызывает проблему преобразования.
Комментарии:
1. Определите «дополнительные пробелы». Покажите запрос, который неожиданно срабатывает.
2. Нет, они сохраняются с дополнительными пробелами, но я не хочу, чтобы какие-либо пробелы были объединены в конце. Поскольку, если я выполняю поиск с помощью ‘1’ или ‘1’ или ‘1’, кажется, что они совпадают, что неверно, сравнение должно совпадать только для ‘1’ или ‘0’, а не для чего-либо с ‘1 и количеством пробелов здесь’
3. Покажите нам соответствующий запрос, который вы используете, пожалуйста.
4. @Gustav — Я изменил вопрос, который содержит запрос insert.
Ответ №1:
В вашем операторе insert нет ничего плохого. Проблема заключается в том, как MySQL сравнивает строки.
Даже следующий запрос будет соответствовать:
SELECT * FROM B where TRIM(bar) = '1 ';
Следующее работает правильно (Т. Е. не соответствует):
SELECT * FROM B where bar LIKE '1 ';
Ответ №2:
MySQL справляется с неявным преобразованием. Поскольку вы преобразуете число в строковый тип, я не вижу никакой проблемы, которая могла бы возникнуть. Следовательно, должно сработать что-то вроде UPDATE table1 SET text_column = CONCAT(' ',tinyint_column,' ')
.
Комментарии:
1. Цитата из OP :
with additional spaces instead of just 1 or 0
2. @Dems Извините, я, должно быть, пропустил это. Отредактировал ответ
3. Нет, они сохраняются с дополнительными пробелами, но я не хочу, чтобы какое-либо пространство было объединено. Поскольку, если я выполняю поиск с помощью ‘1’ или ‘1’ или ‘1’, кажется, что они совпадают, что неверно.