Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: update bazy zmiana typu pola z tinyblob na varchar
Forum PHP.pl > Forum > Bazy danych > MySQL
Dafidov
Witam.
Szukałem szukałem i nie znalazłem.
Mam za zadanie zmienic w bazie pola w tabelach z typu tinyblob na varchar, niestety nie udało mi sie nigdzie znalesc informacji czy da sie z bazy danych wybrac tabele zawierajace konkretny typ pola (w moim przypadku tinyblob) oczywiscie bez utraty danych zapisanych w tych polach smile.gif .
Czy ma ktos wiedze na ten temat - czy mozna - i jesli tak to jakim zapytaniem - wybrac z bazy danych tabele z kolumnami konkretnego typu?
Jesli da sie to zrobic to jak najprosciej zapytaniem sql-owm dokonac takiej zmiany?
Z gory dziekuje za pomoc.
Pozdrawiam
nevt
można, jeżeli masz uprawnienia do odczytu bazy `information_schema` :
  1. SELECT `TABLE_SCHEMA`, `TABLE_NAME`, `COLUMN_NAME` FROM `information_schema`.`COLUMNS` WHERE `DATA_TYPE` = 'tinyblob';

powodzenia
Dafidov
Dzieki smiga smile.gif
Jak bys mogl to powiedz mi jeszcze tylko jak teraz przejechac po liscie otrzymanych tabel zeby zmienic im typ pola na varchar?
Chyba powinno to byc cos takiego:
  1. ALTER TABLE `TABLE_SCHEMA`, `TABLE_NAME`, `COLUMN_NAME` CHANGE `information_schema`.`COLUMNS` `information_schema`.`COLUMNS` varchar NOT NULL;

Ale nie wiem jak przeleciec przez znalezione rekordy i czy na pewno w ten sposob uda sie dokonac zmiany typow pol....
Z gory dzieki za pomoc smile.gif
nevt
nawet tego nie próbuj w ten sposób bo rozsypiesz sobie baze danych... nie możesz zmieniać tabel w information_schema. wyniki tego zapytania, co ci podalem, pobierasz w PHP i pakujesz do tablicy, a potem w pętelce robisz ALTER TABLE, dla poszczegónych baz/tabel/pól - poćwicz trochę sam- gotowca nie chce mi sie pisać ...
Dafidov
Dzieki - powalcze sam i zobacze czy uda mi sie przez to przegryzc smile.gif
Jak bede mial klopoty to mam nadzieje ze bede mogl jeszcze liczyc na jakas ewentulana pomoc winksmiley.jpg
Pozdrawiam

Na poczatku myslalem zeby napisac procedurke ktora zmienie wymagane pola ale skonczylo sie na prostrzej wersji smile.gif
Ponizszy kod wygenerowal mi zapytanka ktore wkleilem do pliku i z pliku wrzucilem do bazki gdzie dokonaly sie zmiany.
  1. SELECT CONCAT('ALTER TABLE `',`TABLE_NAME`,'` MODIFY `',`COLUMN_NAME` , '` varchar(255) ' ,CASE `IS_NULLABLE` WHEN 'NO' THEN 'NOT NULL' ELSE 'NULL' END), `COLUMN_DEFAULT` FROM `information_schema`.`COLUMNS` WHERE `DATA_TYPE` = 'tinyblob';

i podobnie dla pol typu blob zamienione na typ text.

Pozdrawiam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.