Zmiana maksymalnej długości kolumny varchar?

Próbuję zaktualizować długość kolumny varchar z 255 znaków do 500 bez utraty zawartości. Mam upuszczone i ponownie utworzone tabele wcześniej, ale nigdy nie zostały narażone na Alter statement, który jest to, co uważam, że muszę użyć, aby to zrobić. Znalazłem dokumentację tutaj: ALTER TABLE (Transfact-SQL) jednak nie mogę zrobić z tego głowy ani ogona.

Mam do tej pory (zasadniczo nic niestety):

alter table [progennet_dev].PROGEN.LE
alter column UR_VALUE_3

Jak podchodzisz do tego? Czy istnieje lepsza dokumentacja dla tego Oświadczenia tam (zrobiłem kilka poszukiwań przykładowe oświadczenie, ale wyszedł pusty)?

Author: abatishchev, 2012-01-12

9 answers

Potrzebujesz

ALTER TABLE YourTable ALTER COLUMN YourColumn <<new_datatype>> [NULL | NOT NULL]

Ale pamiętaj, aby w razie potrzeby wyraźnie określić NOT NULL.

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500) NOT NULL;

Jeśli pozostawisz to nieokreślone, jak poniżej...

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500);

Wtedy kolumna domyślnie zezwala na null, nawet jeśli pierwotnie była zdefiniowana jako NOT NULL. tj. pominięcie specyfikacji w ALTER TABLE ... ALTER COLUMN jest zawsze traktowane jako.

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500) NULL;

To zachowanie różni się od tego, które stosuje się dla nowych kolumn utworzonych za pomocą ALTER TABLE (lub w czasie CREATE TABLE). Tam domyślna nullability zależy od ANSI_NULL_DFLT ustawienia.

 387
Author: Martin Smith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-16 15:47:01

Zwiększenie rozmiaru kolumny o ALTER nie spowoduje utraty danych:

alter table [progennet_dev].PROGEN.LE 
    alter column UR_VALUE_3 varchar(500) 

Jak podkreśla @ Martin, pamiętaj, aby wyraźnie określić NULL | NOT NULL

 27
Author: Mitch Wheat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-12 01:46:49

Możesz użyć modify:

ALTER TABLE `table name` 
modify COLUMN `column name` varchar("length");
 19
Author: anonymous,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-28 16:36:46
ALTER TABLE TABLE_NAME MODIFY COLUMN_NAME VARCHAR(40);

Późno na pytanie - ale używam Oracle SQL Developer i odpowiedź @ anonymous była najbliższa, ale ciągle otrzymywała Błędy składniowe, dopóki nie edytowałem zapytania do tego.

Hope this helps someone

 2
Author: Jett,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-08-07 19:48:06

Użycie narzędzia Maria-DB i DB-Navigator wewnątrz IntelliJ, MODIFY Column zadziałało dla mnie zamiast Alter Column

 1
Author: Rahul Sharma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-04 18:57:42

Ja też miałem ponad wątpliwości, to co dla mnie zadziałało to

ALTER TABLE `your_table` CHANGE `property` `property` 
VARCHAR(whatever_you_want) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL;  
 0
Author: R. Gurung,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-21 16:26:12

To działało u mnie w db2:

alter table "JOBS"  alter column "JOB_TITLE" set  data type varchar(30);
 0
Author: Mukesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-10-28 12:28:03

Dla MariaDB użyj zmodyfikuj kolumnę :

ALTER TABLE table_name MODIFY COLUMN column_name VARCHAR (500);
To zadziała.
 0
Author: hammadshahir,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-02-10 10:30:59

Jako alternatywę można zapisać stare dane i utworzyć nową tabelę z nowymi parametrami.

Zobacz zdjęcie

W Sql Server Management Studio: "twoja baza danych" => zadanie => generatescripts => wybierz konkretny obiekt bazy danych => "twoja tabela" => zaawansowane => typy danych do skryptu - schemat i dane => Generuj

Osobiście tak zrobiłem.

 0
Author: vlad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-01-07 11:07:39