Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z baza
Forum PHP.pl > Forum > Bazy danych > MySQL
kolumb
Witam

Mam problem z moja baza danych. Nie moge ustawić typu kolumny char z 40 znakami. Typ jest automatycznie zmieniany na varchar(40) . Ogólnie char jest akceptowany tylko do 5 znaków. Nie wiecie czy to wina jakiegoś configu i jak to moge zmienić?

Mój serwer MySQL 3.23.58-max-debug

Pozdrawiam
SongoQ
Az bardzo Ci na tym zalezy. Typ varchar automatycznie sie dostosowuje ogranicznik jest chyba na 32 pozniej wszystko jest traktowane na varchar czyli zmienny typ dlugosci. A czy da sie w configu zmienic to musisz w dokumentacji poszukac ale podejrzewam ze nie.
mhs
Kiedyś pytałem tutaj na forum dlaczego tak się dzieje, ale niestety nikt nie był wstanie udzielić odpowiedzi.

Z tego co pamiętam taka sytuacja ma miejsce gdy np. w zapytaniu tworzacym tabele masz w jednej tabeli zdefiniony zarowno typ char oraz varchar. Jezeli masz w jednej tabeli tylko char to wowczas nie zmienia typu.

Przed chwila jednak sprawdzilem na wersji 5.0.xx i takiej definicji:
  1. mysql> CREATE TABLE test33 (id int UNSIGNED NOT NULL PRIMARY KEY, nazwa char(36), nazwa2 varchar(123
  2. ));
  3. Query OK, 0 rows affected (0.11 sec)


mysql nie zmienil i po wczytaniu parametrow tabeli wyszlo:
  1. mysql> DESC test33;
  2. +--------+------------------+------+-----+---------+-------+
  3. | FIELD | Type | NULL | KEY | DEFAULT | Extra |
  4. +--------+------------------+------+-----+---------+-------+
  5. | id | int(10) UNSIGNED | NO | PRI | NULL | |
  6. | nazwa | char(36) | YES | | NULL | |
  7. | nazwa2 | varchar(123) | YES | | NULL | |
  8. +--------+------------------+------+-----+---------+-------+
  9. 3 rows IN SET (0.01 sec)


Na pewno w poprzednich wersjach (ale ktorych nie jestem dokladnie powiedziec) wlasnie mysql w opisany wyzej sposob zmienial typ. Czemu? Niestety nie wiem. Być może to kwestia jakiegos konfigu. Nie wiem.
SongoQ
Dziwne mozliwe ze tak bylo we wczesniejszych wersjach. @mhs tnx za wyjasnienie. Jak bys znalazl jakies info na ten temat to wrzuc na forum.
mhs
Pewnie tak właśnie było we wcześniejszych wersjach (chociaż pewnie byłoby trzeba się dokładnie dowiedzieć
c kiedy zmieniło się tak). Przed chwilą za nim udzieliłem odpowiedzi na posta zrobiłem właśnie taki mały test i lekko się zdziwiłem, że mysql "poprawnie" się zachował, gdyż mając wczesniejsze przygody z tym problemem byłem pewnien, że również w chwili obecnej mysql tak się zachowa. No, ale od wersji 5.x troche rzeczy sie zmienilo smile.gif. Zrobiłem ten test tylko ze względu na to, że nie spodobało mi się to co napisał kolumb (ze mysql do 5 znakow tworzy char'a, a pozniej varchar). Wydawało mi się to trochę dziwne (chociaż kolumb pisze, że pracuje na wersji 3.23.xx, czyli jakby nie było trochę starej), ale być moze tak jest (sam jednak czegos takiego nigdy nie zauwazylem, aczkolwiek na tych wersjach bardzo krotko pracowalem).

@SongoQ Gdybym znalazl cos to jasne, ze sie tym podziele.

Pozdrawiam.
kolumb
heh

utworzyłem tabele tylko z char i poszło potem zmieniłem jedną kolumne na varchar i automatycznie zmieniło wszystko.

interesuje mnie to bo nie wiem dlaczego na varchar skrypt mi sie sypie. kiedy ustawie ta kolumne na text już działa normalnie. zapisuje tam zakodowane hasło przez sha1()
mhs
Cytat(kolumb @ 8.08.2006, 22:47 ) *
utworzyłem tabele tylko z char i poszło potem zmieniłem jedną kolumne na varchar i automatycznie zmieniło wszystko.


czyli wskazywałoby na to, że działa tak jak opisałem.

Cytat(kolumb @ 8.08.2006, 22:47 ) *
interesuje mnie to bo nie wiem dlaczego na varchar skrypt mi sie sypie. kiedy ustawie ta kolumne na text już działa normalnie. zapisuje tam zakodowane hasło przez sha1()

hmm, za bardzo nie wiem dlaczego tak się dzieje, ale trochę dziwne to wszystko dziala, z tego co opiszujesz.
kolumb
dla mnie tez to dziwne, bo text a varchar nie powinno robic różnicy, te pola przechowuja takie same typy danych. na char tez skrypt mi działa, więc nie wiem czemu na varchar nie.
nospor
Problem odnosnie char i konwersji na varchar omawiany byl posredniu tu:
http://forum.php.pl/index.php?showtopic=48144&hl=varchar

Cytat
No niestety nie mogę znaleźć. Ale zrobilem eksperyment:
zalozylem tabele z jednym polem CHAR (20). No i git. Jest char
Dla pewnosci dodaje drugie pole CHAR. I jest git. Oba są CHAR.
Teraz dodaje kolejne pole, ale juz VARCHAR. No i automaycznie wszystkie pola CHAR zamieniają sie na VARCHAR. Proba ustawienia ich spowrotem na CHAR nic nie daje. Dopier gdy usune tamto VARCHAR, to moge spowrotem to zamienic na CHAR.
Nie sądze by byl to bug mojego klienta do mysql

edit:
znalazlem w manualu
http://dev.mysql.com/doc/refman/4.1/en/sil...mn-changes.html
CYTAT
If any column in a table has a variable length, the entire row becomes variable-length as a result. Therefore, if a table contains any variable-length columns (VARCHAR, TEXT, or BLOB), all CHAR columns longer than three characters are changed to VARCHAR columns
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-2024 Invision Power Services, Inc.