29. juli 2006 - 01:25Der er
13 kommentarer og 1 løsning
Union af to select sætninger
Jeg for følgende fejl når jeg prøver at benytte union
Illegal mix of collations for operation 'UNION' Error 1271
min forspørgelse: select 'out',CONCAT('0',q.prefix), qt.name AS prefix from qos_digit_list q, qos_digit_provider qp, qos_digit_type qt where q.type = qt.id and q.provider = qp.id union select 'in' as one ,u.extn as two, u.login as three from qos_users u;
Hvad kan være galt det virker når jeg kun henter fra den ene tabel (qos_digit_list), men det lader ikke til at mine joins virker sammen med union, jeg har prøvet at oprette et view for at se hvad der sker men samme fejl opstår... !!!
CREATE TABLE `qos_users` ( `extn` int(10) unsigned NOT NULL default '0', `login` varchar(45) character set latin1 NOT NULL default '', `password` varchar(12) character set latin1 NOT NULL default '', `phonetype` int(10) unsigned NOT NULL default '0', `fullname` varchar(45) character set latin1 NOT NULL default '', `email` varchar(45) character set latin1 NOT NULL default '', `headset` tinyint(1) default NULL, `IP` varchar(45) character set latin1 default NULL, `location` int(10) unsigned NOT NULL default '0', PRIMARY KEY (`extn`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_danish_ci;
At arbejde i skyen er en hårfin balancegang mellem sikkerhed, fleksibilitet og omkostninger.
26. august 2024
Slettet bruger
29. juli 2006 - 02:33#1
I den første er parameter nummer 2 en streng. I den anden er parameter nummer 2 en int. Den går ikke. Returparametrene skal være samme typer i de to queries.
Du skal også være opmærksom på længderne af parametrene, da maxlængden på en varchar i den første kan bestemme, hvor meget af strengene den tager med fra den anden query - men i dette tilfælde burde det ikke gøre noget, da du har 80 i den første og 45 i den anden.
Ja det ville jeg også tro men det er faktisk parameter 3 der laver fejlen, for denne virker:
select 'out',CONCAT('0',q.prefix), qt.name AS prefix from qos_digit_list q, qos_digit_provider qp, qos_digit_type qt where q.type = qt.id and q.provider = qp.id union select 'in' as one ,u.extn as two, u.login as three from qos_users u;
select 'out',CONCAT('0',q.prefix), qt.name AS prefix from qos_digit_list q, qos_digit_provider qp, qos_digit_type qt where q.type = qt.id and q.provider = qp.id union select 'in' as one ,u.extn as two, u.login ollate latin1_danish_ci as three from qos_users u;
select 'out',CONCAT('0',q.prefix), qt.name AS prefix from qos_digit_list q, qos_digit_provider qp, qos_digit_type qt where q.type = qt.id and q.provider = qp.id union select 'in' as one ,u.extn as two, u.login collate latin1_danish_ci as three from qos_users u;
Hej Arne det ser ud til at virke, kan du fortælle hvorfor det går galt, når jeg ikke bruger collate latin1_danish_ci ?. Jeg var selv i samme retning i forhold til tegnsættet men, jeg prøvet at ændre de bagvedlægende tabeller til alle mulige forskellige encodings, men intet hjalp. Men det gjorde det lille trick, kan du ikke fortælle hvorfor (hvis du ved det) i et svar, du har igen fortjent points ;-) Din MySQL haj
mysql> select 123 union select 'abc'; +-----+ | 123 | +-----+ | 123 | | abc | +-----+ 2 rows in set (0.00 sec)
type mix => no problem
mysql> select 'abc' collate latin1_danish_ci as s union select 'def' collate latin1_swedish_ci as s; ERROR 1267 (HY000): Illegal mix of collations (latin1_danish_ci,EXPLICIT) and (l atin1_swedish_ci,EXPLICIT) for operation 'UNION'
blande dansk og svensk => big problem
mysql> select 'abc' collate latin1_danish_ci as s union select 'def' collate latin1_danish_ci as s; +-----+ | s | +-----+ | abc | | def | +-----+ 2 rows in set (0.00 sec)
mit eksempel matchede vist ikke helt problem stillingen
jeg kan godt få din fejl tekst også
mysql> SELECT CAST('abc' AS CHAR CHARACTER SET utf8); +----------------------------------------+ | CAST('abc' AS CHAR CHARACTER SET utf8) | +----------------------------------------+ | abc | +----------------------------------------+ 1 row in set (0.01 sec)
mysql> SELECT CAST('abc' AS CHAR CHARACTER SET utf8) COLLATE latin1_danish_ci AS s; ERROR 1253 (42000): COLLATION 'latin1_danish_ci' is not valid for CHARACTER SET 'utf8'
Tak skal du have Arne, jeg har ikke flere spørgsmål, jeg tror ander der ramme dette spørgsmål vil få meget ud af det du har bidraget med, jeg takker mange gange.
P.S. Glæder mig allerede til at give dig points næste gang ;-)
også tak til dig sandbox !!
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.