Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z baza, Nieakceptowany typ char(40)
kolumb
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 8.08.2006

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
SongoQ
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
mhs
post
Post #3





Grupa: Zarejestrowani
Postów: 764
Pomógł: 3
Dołączył: 30.04.2003

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
SongoQ
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


Dziwne mozliwe ze tak bylo we wczesniejszych wersjach. @mhs tnx za wyjasnienie. Jak bys znalazl jakies info na ten temat to wrzuc na forum.


--------------------
Go to the top of the page
+Quote Post
mhs
post
Post #5





Grupa: Zarejestrowani
Postów: 764
Pomógł: 3
Dołączył: 30.04.2003

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
kolumb
post
Post #6





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 8.08.2006

Ostrzeżenie: (0%)
-----


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()
Go to the top of the page
+Quote Post
mhs
post
Post #7





Grupa: Zarejestrowani
Postów: 764
Pomógł: 3
Dołączył: 30.04.2003

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
kolumb
post
Post #8





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 8.08.2006

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 04:47