Mysql как изменить длину поля

Для подобных целей в MySQL используется команда ALTER TABLE в комбинации с MODIFY. Небольшое предостережение, если в поле, которое вы хотите изменить, содержится, текст (или число), например, длиной 255 символов, и вы сократите длину поля допустим до 124, то из-за, невозможности вместить имеющийся текст в новых параметрах, его не вместившаяся часть будет безвозвратно утеряна, будьте осторожны!

Для подобных целей в MySQL используется команда ALTER TABLE в комбинации с MODIFY. Небольшое предостережение, если в поле, которое вы хотите изменить, содержится, текст (или число), например, длиной 255 символов, и вы сократите длину поля допустим до 124, то из-за, невозможности вместить имеющийся текст в новых параметрах, его не вместившаяся часть будет безвозвратно утеряна, будьте осторожны!

INT

Перед тем, как изменить длину целочисленного поля, необходимо знать диапазон значений, которые мы будем хранить в этом поле, и исходя из него, выбрать подходящий тип данных, вот список существующих типов с их диапазонами:

TINYINT:   диапазон от -128 до 127, с параметром UNSIGNED 0 до 255 
SMALLINT:  диапазон от -32768 до 32767, с параметром UNSIGNED 0 до 65535
MEDIUMINT: диапазон от -8388608 до 8388607, с параметром UNSIGNED 0 до 16777215
INT:       диапазон от -2147483648 до 2147483647, с параметром UNSIGNED 0 до 4294967295
BIGINT:    диапазон от -9223372036854775808 до 9223372036854775807, с параметром UNSIGNED 0 до 18446744073709551615

Если вы используете числа малого диапазона, не следует указывать тип больших, так как это повлияет на скорость выполнения запросов. После того, как мы выбрали подходящий тип данных, модифицируем наше поле. К примеру мы выбрали тип BIGINT, тогда необходимо выполнить такую команду:

ALTER TABLE table_name MODIFY field_name BIGINT UNSIGNED DEFAULT 5;

table_name — название таблицы в которой расположено поле, field_name — название поля, длину которого вы хотите изменить, BIGINT — новый тип данных. Если вы намереваетесь хранить в поле только положительные числа, то укажите параметр UNSIGNED, параметр DEFAULT определяет значение по умолчанию, в нашем примере, для наглядности, это число 5, если же значение по умолчанию не требуется, опустите этот параметр.

DECIMAL

ALTER TABLE table_name MODIFY field_name DECIMAL(6,2);

Изменение длины поля типа DECIMAIL — дробное число. Первое значение в скобках максимальная длина числа до точки, второе после.

VARCHAR

Чтобы изменить длину поля типа VARCHAR используется следующий шаблон:

ALTER TABLE table_name MODIFY field_name VARCHAR(128);

Длина поля в нашем примере 128, укажите желаемое, может принимать значение от 0 до 65535.

CHAR

Чтобы изменить длину поля типа CHAR используется такой формат:

ALTER TABLE table_name MODIFY field_name CHAR(64);

Длина поля в нашем примере 64, укажите необходимое, может принимать значение от 0 до 255.

TEXT

В MySQL есть следующие типы текстовых полей:

TINYTEXT:   текст длиной до 255 байт.
TEXT:       текст длиной до 65 КБ.
MEDIUMTEXT: текст длиной до 16 МБ
LARGETEXT:  текст длиной до 4 ГБ

Для того чтобы изменить длину текстового поля, например на MEDIUMTEXT, нужно выполнить следующую команду:

ALTER TABLE table_name MODIFY field_name MEDIUMTEXT;

SQL-запрос для изменения типа столбца в базе данных SQL Server

Мы можем использовать оператор ALTER TABLE ALTER COLUMN для изменения типа столбца в таблице. Использует следующий синтаксис:

ALTER TABLE [tbl_name] ALTER COLUMN [col_name] [DATA_TYPE]

Здесь

  • tbl_name: задает имя таблицы.
  • col_name: задает имя столбца, тип которого мы хотим изменить. col_name должно быть указано после ключевых слов ALTER COLUMN.
  • DATA_TYPE: задает новый тип данных и длину столбца.

В целях демонстрации я создал таблицу с именем tblStudent.

CREATE TABLE [dbo].[tblstudent]
(
[id] [INT] IDENTITY(1, 1) NOT NULL,
[student_code] [VARCHAR](20) NOT NULL,
[student_firstname] [VARCHAR](250) NOT NULL,
[student_lastname] [VARCHAR](10) NOT NULL,
[address] [VARCHAR](max) NULL,
[city_code] [VARCHAR](20) NOT NULL,
[school_code] [VARCHAR](20) NULL,
[admissiondate] [DATETIME] NULL,
CONSTRAINT [PK_ID] PRIMARY KEY CLUSTERED ( [id] ASC )
)

Предположим, что вы хотите изменить тип данных [address] с varchar(max) на nvarchar(1500). Выполните следующий запрос для изменения типа столбца.

Alter table tblstudent alter column address nvarchar(1500)

Проверим изменения с помощью следующего скрипта.

use StudentDB
go
select TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,DATA_TYPE, CHARACTER_MAXIMUM_LENGTH from INFORMATION_SCHEMA.COLUMNS
where table_name='tblStudent'

Видно, что тип данных столбца изменился.

Важные замечания:

  1. При уменьшении размера столбца SQL Server проверит данные в таблице и, если данные превышают новую длину, вернет предупреждение и прервет выполнение оператора.
  2. При изменении типа данных nvarchar на varchar, если столбец содержит строку Юникод, то SQL Server возвращает ошибку и прерывает оператор.
  3. В отличие от MySQL изменение типа данных нескольких столбцов не допускается.
  4. Вы не можете добавить
    а. ограничение NOT NULL, если столбец содержит NULL-значения;
    б. ограничение UNIQUE, если в столбце имеются дубликаты.

Запрос SQL для изменения типа столбца в MySQL

Для изменения типа данных столбца мы можем использовать оператор ALTER TABLE MODIFY COLUMN. Синтаксис изменения типа данных столбца имеет следующий вид:

ALTER TABLE [tbl_name] MODIFY COLUMN [col_name_1] [DATA_TYPE], 
MODIFY [col_name_2] [data_type],
MODIFY [col_name_3] [data_type]

Здесь

  • Tbl_name: задает имя таблицы, содержащая столбец, который мы хотим изменить.
  • Col_name: задает имя столбца, тип которого мы хотим изменить. Col_name должно быть указано после ключевых слов MODIFY COLUMN. Мы можем изменить тип данных нескольких столбцов. При изменении типа данных нескольких столбцов, столбцы разделяются запятой (,).
  • Datatype: задает новый тип данных и длину столбца. Тип данных должен указываться после имени столбца.

В целях демонстрации я создал таблицу с именем tblactor в базе данных DemoDatabase. Вот код, который создает таблицу.

create table tblactor
(
actor_id int,
first_name varchar(500),
first_name varchar(500),
address varchar(500),
CityID int,
lastupdate datetime
)

Рассмотрим несколько примеров.

Пример 1: Запрос для изменения типа данных одного столбца

Мы хотим изменить тип столбца address с varchar(500) на тип данных TEXT. Выполните следующий запрос для изменения типа данных.

mysql> ALTER TABLE tblActor MODIFY address TEXT
Для проверки изменений выполните следующий запрос:

mysql> describe tblactor

Как можно увидеть, тип данных столбца address был изменен на TEXT.

Пример 2: SQL-запрос для изменения типа данных нескольких столбцов

Мы можем изменить тип данных нескольких столбцов в таблице. В нашем примере мы хотим изменить тип столбцов first_name и last_name. Новым типом данных столбцов становится TINYTEXT.

mysql> ALTER TABLE tblActor MODIFY first_name TINYTEXT, modify last_name TINYTEXT;
Выполните следующий запрос, чтобы проверить изменения:

mysql> describe tblActor

Как видно, тип данных столбцов first_name и last_name изменился на TINYTEXT.

Пример 3: Переименование столбца в MySQL

Чтобы переименовать столбцы, мы должны использовать оператор ALTER TABLE CHANGE COLUMN. Предположим, что вы хотите переименовать столбец CityID в CityCode; вы должны выполнить следующий запрос.

mysql> ALTER TABLE tblActor CHANGE COLUMN CityID CityCode int
Выполните команду describe, чтобы увидеть изменения структуры таблицы.

Видно, что имя столбца изменилось.

Запрос SQL для изменения типа столбца в базе данных PostgreSQL

Мы можем использовать оператор ALTER TABLE ALTER COLUMN для изменения типа данных столбца. Синтаксис изменения типа данных столбца:

ALTER TABLE [tbl_name] ALTER COLUMN [col_name_1] TYPE [data_type], 
ALTER COLUMN [col_name_2] TYPE [data_type],
ALTER COLUMN [col_name_3] TYPE [data_type]

Здесь

  • Tbl_name: задает имя таблицы, содержащая столбец, который вы хотите изменить.
  • Col_name: задает имя столбца, тип которого мы хотим изменить. Col_name должно быть указано после ключевых слов ALTER COLUMN. Мы можем изменить тип данных нескольких столбцов.
  • Data_type: задает новый тип данных и длину столбца. Тип данных должен быть указан после ключевого слова TYPE.

В целях демонстрации я создал таблицу с именем tblmovies в базе данных DemoDatabase. Вот код для создания этой таблицы:

create table tblmovies
(
movie_id int,
Movie_Title varchar(500),
Movie_director TEXT,
Movie_Producer TEXT,
duraion int,
Certificate varchar(5),
rent numeric(10,2)
)

Теперь рассмотрим несколько примеров.

Пример 1: Запрос SQL для изменения типа данных одного столбца

Мы хотим изменить тип столбца movie_id с типа данных int4 на int8. Для изменения типа данных выполните следующий запрос.

ALTER TABLE tblmovies ALTER COLUMN movie_id TYPE BIGINT

Для проверки изменений выполните следующий запрос:

SELECT 
table_catalog,
table_name,
column_name,
udt_name,
character_maximum_length
FROM
information_schema.columns
WHERE
table_name = 'tblmovies';

Как видно, тип данных столбца movie_id стал int8.

Пример 2: Запрос SQL для изменения типа данных нескольких столбцов

Мы можем изменить тип данных сразу нескольких столбцов таблицы. В нашем примере мы хотим изменить тип столбцов movie_title и movie_producer. Новым типом данных для столбца movie_title становится TEXT, а для movie_producer — varchar(2000).

ALTER TABLE tblmovies ALTER COLUMN movie_title TYPE text, ALTER COLUMN movie_producer TYPE varchar(2000);

Выполните следующий запрос для проверки изменений:

SELECT 
table_catalog,
table_name,
column_name,
udt_name,
character_maximum_length
FROM
information_schema.columns
WHERE
table_name = 'tblmovies';

Как видно, типом данных столбца movie_title является TEXT, а movie_producer — varchar(2000).

5 ответов

Обычно я использую это утверждение:

ALTER TABLE `table_name`
  CHANGE COLUMN `col_name` `col_name` VARCHAR(10000);

Но я думаю, что SET тоже будет работать, никогда не пробовал.:)

hjpotter92
17 апр. 2012, в 03:07

Поделиться

Безопасно увеличить размер столбца varchar. Вы не испортите свои данные.

Если это поможет вашему спокойствию, имейте в виду, вы всегда можете запустить резервное копирование базы данных, прежде чем изменять свои структуры данных.

Кстати, правильный синтаксис:

ALTER TABLE table_name MODIFY col_name VARCHAR(10000)

Кроме того, если столбец, ранее разрешенный/не разрешающий нули, вы должны добавить соответствующий синтаксис в конец инструкции alter table после типа столбца.

Lynn Crumbling
17 апр. 2012, в 02:53

Поделиться

Я бы хотел объяснить различные синтаксисы таблиц альтернатив — см. документацию MySQL

Для добавления/удаления значений по умолчанию для столбца:

ALTER TABLE table_name
ALTER COLUMN col_name {SET DEFAULT literal | DROP DEFAULT}

Чтобы переименовать столбец, изменив его тип данных и, возможно, изменив порядок столбцов:

ALTER TABLE table_name
CHANGE [COLUMN] old_col_name new_col_name column_definition
[FIRST|AFTER col_name]

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

ALTER TABLE table_name
MODIFY [COLUMN] col_name column_definition
[FIRST | AFTER col_name]

Mike Causer
24 дек. 2013, в 09:00

Поделиться

Для меня это сработало:

ALTER TABLE tablename MODIFY имя поля VARCHAR (128) NOT NULL;

Knowledge Knight
09 апр. 2017, в 16:50

Поделиться

используйте этот синтаксис:
alter table table_name изменить столбец col_name varchar (10000);

Amichai Ungar
06 авг. 2017, в 09:13

Поделиться

Ещё вопросы

  • 1Шаблон дизайна медиатора: Почему классы должны информировать медиатора о своем поведении?
  • 0ошибка: передача ‘const ComplexNumber’ в качестве ‘this’ аргумента ‘const ComplexNumber & ComplexNumber :: operator — = (const Complex)
  • 0Получение базового адреса не работает
  • 1Простая простая 2D графика в виде
  • 1Взаимодействие — вызывать ли родной из управляемых или наоборот
  • 1com.microsoft.sqlserver.jdbc.SQLServerException: сбой входа для пользователя ‘sa’
  • 0Регулярное выражение в угловых
  • 1SpecsFor MVC / MSBuild.exe неправильно строит / публикует проект в Visual Studio 2012
  • 0SQL-запрос для перечисления всех записей, где все значения для одного столбца не находятся в другом столбце
  • 0C ++ дает массивы функциям и возвращает их
  • 1TypeError: while_loop () получил неожиданный аргумент ключевого слова «Maximum_iterations» в Jupyter Azure
  • 0скопировать все таблицы из базы данных в другую базу данных в MySQL
  • 1Как создать пользовательскую функцию ошибки с данными
  • 1Как изменить метки осей по умолчанию в D3
  • 1InstancePerApiControllerType не работает
  • 1Инициализация объектов на ноль или новый?
  • 0Локальная переменная в представлении AngularJS
  • 1Вызвать событие нажатия клавиш в Android?
  • 0Как выбрать DISTINCT с помощью Datatables 1.10.4
  • 1Java-очередь, массивы и JNI
  • 0плохие-хорошие слова с регулярным выражением
  • 0производительность mysql MEDIUMTEXT
  • 0Как получить параметры из URL в angularjs
  • 1Убить процесс в панели
  • 1повторно использовать кэшированные весенние контексты для создания большего контекста
  • 0angularjs присваивает всем html-элементам определенного типа собственную область видимости
  • 0сообщение об ошибке при использовании указателей c ++
  • 0Дамп ядра при создании вектора из диапазона векторов
  • 0Проблема с объемом пользовательской директивы
  • 1Как перевести мышью точку Tab в точку JTabbedPane?
  • 1Словари Python: почему и когда мне приходится использовать иногда «:», а иногда «=» между ключом и значением?
  • 0Возврат нескольких значений в одном столбце из другой таблицы
  • 1OneToMany JPA аннотация
  • 0Получение контейнера в качестве аргумента шаблона
  • 0Как отсортировать многомерный массив по нескольким различным ключам в PHP?
  • 0Директива AngularJS: контроллер или ссылка?
  • 0FeathersJS REST возвращает записи с определенным значением
  • 1Как выделять определенные элементы из базы данных с помощью SimpleCursorAdapter
  • 0Изменить ширину события по умолчанию в представлении повестки дня для полного календаря
  • 1Как создать Android WifiConfiguration и получить доступ к Wi-Fi с помощью имени пользователя / пароля
  • 1Добавить новый столбец в Pandas Dataframe, сравнивая индексы
  • 1Отображение списка с различными типами информации в Android
  • 1Инструмент для генерации классов сопоставления из справочника услуг
  • 0Создание ионного приложения с помощью Cordova Cli
  • 0Значения Unicode в запросе вставки pymysql
  • 1Javascript — функция вызова в методе объекта связывает this с глобальным объектом
  • 0C ++: WordCount из строки Char с указателями…?
  • 0Выходная переменная из Javascript в PHP / HTML
  • 1Как получить клиентский IP. MAC. Имя ПК использовать wcf4 (режим TCP / IP)
  • 0PHP: декодировать JSON на китайский и Smily не работает? [Дубликат]

Понравилась статья? Поделить с друзьями:
  • Mysql как изменить not null на null
  • Ms sql server error 9003
  • Mysql storage error 28 from storage engine
  • Ms sql server error 5030
  • Ms sql server error 3041 severity 16 state 1