[PEAR:MDB] char statt varchar bei mit Manager erzeugten Tabellen
[PEAR:MDB] char statt varchar bei mit Manager erzeugten Tabellen
am 28.02.2005 09:11:23 von Jens Riedel
Hallo,
ich habe mit dem MDB:Manager per XML-Schema einige Tabellen auf MySQL
erzeugt.
Seltsamerweise wurden mir dort längenbegrenzte Textfelder teilweise als
varchar(x) (was ich auch möchte) und teilweise als char(x) angelegt,
ohne dass ich da ein Muster erkennen kann, wann und warum welcher Typ
verwendet wurde (Feldlängen der char-Felder liegen zwischen 1 und 255
Zeichen).
Kann mir jemand einen Tip geben, wie ich varchar-Felder erzwingen kann?
Gruß,
Jens
Re: [PEAR:MDB] char statt varchar bei mit Manager erzeugten Tabellen
am 28.02.2005 11:29:05 von Helmut Chang
Jens Riedel schrieb:
> Hallo,
>
> ich habe mit dem MDB:Manager per XML-Schema einige Tabellen auf MySQL
> erzeugt.
> Seltsamerweise wurden mir dort längenbegrenzte Textfelder teilweise als
> varchar(x) (was ich auch möchte) und teilweise als char(x) angelegt,
> ohne dass ich da ein Muster erkennen kann, wann und warum welcher Typ
> verwendet wurde (Feldlängen der char-Felder liegen zwischen 1 und 255
> Zeichen).
Eventuell liegt es an
?
Insbesondere:
| 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.
Habs gerade getestet:
mysql> CREATE TABLE vchar (
-> vchar VARCHAR(100) NOT NULL,
-> char1 CHAR(100) NOT NULL,
-> char2 CHAR(2) NOT NULL
-> );
Query OK, 0 rows affected (0.01 sec)
mysql> SHOW CREATE TABLE vchar;
+-------+--------------------------------------------------- -----------+
| Table | Create Table |
+-------+--------------------------------------------------- -----------+
| vchar | CREATE TABLE `vchar` ( |
| | `vchar` varchar(100) NOT NULL default '', |
| | `char1` varchar(100) NOT NULL default '', |
| | ^^^^^^^ |
| | `char2` char(2) NOT NULL default '' |
| | ) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+-------+--------------------------------------------------- -----------+
1 row in set (0.00 sec)
gruss, heli
Re: [PEAR:MDB] char statt varchar bei mit Manager erzeugten Tabellen
am 28.02.2005 11:44:49 von Jens Riedel
Hallo Heli,
> ?
>
> Insbesondere:
>
> | 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.
bei mir liegt das Problem ja umgekehrt, ich möchte gerne varchar-Felder
bekommen, kriege aber fast überall char-Felder, sobald ich ein
length-Attribut mitgebe.
Und bei den Feldern, wo es mit varchar geklappt hat, habe ich keine
Ahnung, warum; die Definition der Felder in XML ist identisch, teilweise
per copy-and-paste erzeugt und nur der Name ausgetauscht.
Gruß,
Jens
Re: [PEAR:MDB] char statt varchar bei mit Manager erzeugten Tabellen
am 28.02.2005 13:50:11 von Helmut Chang
Jens Riedel schrieb:
> bei mir liegt das Problem ja umgekehrt, ich möchte gerne varchar-Felder
> bekommen, kriege aber fast überall char-Felder, sobald ich ein
> length-Attribut mitgebe.
Stimmt. Das hab ich falsch gelesen. Umgekehrt machts MySQL bei
VARCHAR(<=3). Was bei dir ja nicht der Fall zu sein scheint.
gruss, heli