varchar zu char wandeln

varchar zu char wandeln

am 18.05.2006 10:57:09 von Thomas Dartsch

Hallo,

ich möchte in einer Tabelle aus Geschwindigkeitsgründen alle
varchar-Datenfelder in char wandeln.
Hier die Struktur der vorhandenen Tabelle:

CREATE TABLE `foobar` (
`foo1` varchar(32) collate latin1_german2_ci NOT NULL default '',
`foo2` varchar(32) collate latin1_german2_ci NOT NULL default '',
`foo3` varchar(32) collate latin1_german2_ci NOT NULL default '',
`foo4` int(5) NOT NULL default '0',
PRIMARY KEY (`foo1`),
KEY `foo2` (`foo2`),
KEY `foo3` (`foo3`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci;


Diese Struktur möchte ich nun beispielhaft mit folgendem "alter" ändern:

ALTER TABLE `foobar` CHANGE `foo2` `foo2` CHAR( 32 ) NOT NULL;

Meine alter-Angaben scheint die DB aber zu ignorieren.
Was mache ich falsch?

danke
t.d

Re: varchar zu char wandeln

am 18.05.2006 11:23:44 von Matthias Coy

Thomas Dartsch schrieb:
> Hallo,
>
> ich möchte in einer Tabelle aus Geschwindigkeitsgründen alle
> varchar-Datenfelder in char wandeln.
> Hier die Struktur der vorhandenen Tabelle:
>
> CREATE TABLE `foobar` (
> `foo1` varchar(32) collate latin1_german2_ci NOT NULL default '',
> `foo2` varchar(32) collate latin1_german2_ci NOT NULL default '',
> `foo3` varchar(32) collate latin1_german2_ci NOT NULL default '',
> `foo4` int(5) NOT NULL default '0',
> PRIMARY KEY (`foo1`),
> KEY `foo2` (`foo2`),
> KEY `foo3` (`foo3`)
> ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci;
>
>
> Diese Struktur möchte ich nun beispielhaft mit folgendem "alter" ändern:
>
> ALTER TABLE `foobar` CHANGE `foo2` `foo2` CHAR( 32 ) NOT NULL;
>
> Meine alter-Angaben scheint die DB aber zu ignorieren.
> Was mache ich falsch?
>
> danke
> t.d
>
>
SQL ist zumindest korrekt, bei mir funktionierts.

gruß
matze

Re: varchar zu char wandeln

am 18.05.2006 11:27:10 von Thomas Dartsch

"Matthias Coy" schrieb:

> SQL ist zumindest korrekt, bei mir funktionierts.

Bei mir leider nicht. :(

Ich setze den SQL per phpmyadmin ab. Kann es damit zu tun haben?

MySQL-Version 4.1.7

Re: varchar zu char wandeln

am 18.05.2006 11:40:53 von Christian Kirsch

Thomas Dartsch schrieb:
> "Matthias Coy" schrieb:
>
>> SQL ist zumindest korrekt, bei mir funktionierts.
>
> Bei mir leider nicht. :(
>
> Ich setze den SQL per phpmyadmin ab. Kann es damit zu tun haben?
>

Ach wo. Gerade dieses Werkzeug ist ja berühmt dafür, dass es immer
genau das tut, was der Benutzer erwartet und möchte.

Ich würde auf keinen Fall versuchen, den Befehl auf der Kommandozeile
auszuführen.

Re: varchar zu char wandeln

am 18.05.2006 11:45:45 von Harald Fuchs

In article ,
"Thomas Dartsch" writes:

> "Matthias Coy" schrieb:
>> SQL ist zumindest korrekt, bei mir funktionierts.

> Bei mir leider nicht. :(

> Ich setze den SQL per phpmyadmin ab. Kann es damit zu tun haben?

Im allgemeinen schon, in diesem speziellen Fall aber nicht.
Wenn eine Tabelle eine VARCHAR-Spalte enthält, werden alle
CHAR-Spalten automatisch zu VARCHAR. Du mußt also alle
VARCHAR-Spalten gleichzeitig zu CHAR ändern.

Re: varchar zu char wandeln

am 18.05.2006 12:54:38 von Thomas Dartsch

"Harald Fuchs" schrieb:

> Im allgemeinen schon, in diesem speziellen Fall aber nicht.
> Wenn eine Tabelle eine VARCHAR-Spalte enthält, werden alle
> CHAR-Spalten automatisch zu VARCHAR. Du mußt also alle
> VARCHAR-Spalten gleichzeitig zu CHAR ändern.

ah. alles klar. nun gehts.
Vielen Dank

Re: varchar zu char wandeln

am 18.05.2006 14:29:01 von Andreas Pankratz

Hallo ihr,

kurze Zwischenfrage noch.

Ich habe mal gelesen, dass MySQL intern alle CHAR Colums, die mehr als
3 Buchstaben haben in VARCHAR umrechnet, is da was dran, bzw. ist das
noch aktuell?

Gruß
Andreas

Re: varchar zu char wandeln

am 18.05.2006 14:42:01 von Hartmut Holzgraefe

Andreas Pankratz wrote:
> Hallo ihr,
>=20
> kurze Zwischenfrage noch.
>=20
> Ich habe mal gelesen, dass MySQL intern alle CHAR Colums, die mehr als
> 3 Buchstaben haben in VARCHAR umrechnet, is da was dran, bzw. ist das
> noch aktuell?

nur genau dann wenn es mindest eine explizit als VARCHAR deklarierte
Spalte giebt, denn dann ist die Zeilenlänge ja eh schon variabel und
es macht keinen Sinn mehr den Platz für unbelegte Zeichen in CHARs
zu allozieren.

--=20
Hartmut Holzgraefe, Senior Support Engineer .
MySQL AB, www.mysql.com

http://www.mysql.com/support/