Как мне обработать перемещение данных из tinyint в текстовое поле

#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’, кажется, что они совпадают, что неверно.