Что MySQL конвертирует varchar в char? - PullRequest
0 голосов
/ 21 июля 2011

Когда мы добавили новую таблицу, мы допустили ошибку: поле было varchar (255), но мы должны написать запросы соединения. Поэтому мы изменим таблицу, чтобы сделать char (6).

Мой вопрос: что делает MySQL в этом случае? Это уравновешивает право?

Ответы [ 3 ]

3 голосов
/ 21 июля 2011

Вместо того, чтобы беспокоиться о том, что делает или не делает MySQL, почему бы не преобразовать данные самостоятельно перед изменением.

например.

UPDATE YourTable
SET YourField = LEFT(YourField,6);

ALTER TABLE YourTable MODIFY COLUMN YourField Char(6)

Вы должны заметить, что если ваши данные столбца слишком длинные, это не позволит вам выполнить изменение, если включить режим строгого SQL, см. Полный ответ Шефа

1 голос
/ 21 июля 2011

Будет пытаться конвертировать формат. В вашем случае столбец является строковым типом, поэтому он усекает значение, если не включен режим строгого SQL.

Когда вы меняете тип данных с помощью CHANGE или MODIFY, MySQL пытается преобразовать существующие значения столбца в новый тип, насколько это возможно.

Внимание! Это преобразование может привести к изменению данных. Например, если вы укоротите строковый столбец, значения могут быть усечены. Предотвращать операция завершается успешно, если преобразования в новый тип данных приведет к потере данных, включите строгий режим SQL перед использованием ALTER TABLE (см. Раздел 5.1.6, «Режимы SQL сервера»).

Прочтите предупреждение вниз на две пятых страницы.

0 голосов
/ 21 июля 2011

MySQL даже не позволит вам изменить таблицу, если в любом случае вы потеряете данные (например, в строке есть запись, в которой текст поля длиннее шести символов), поэтому вам лучше преобразовать данные, как Вы считаете нужным.

...