Začal som sa trocha špŕtať v stored procedures a functions, no narazil som na problém.
create table pokus(
stlpec1 varchar(32) NOT NULL COLLATE ascii_bin,
PRIMARY KEY (stlpec1)
);
create procedure pr_pokus (search varchar(32))
BEGIN
SELECT * FROM pokus where stlpec1 = search;
END
Potom, keď zavolám
call pr_pokus('skuska');
Vráti mi to takúto chybu:
Illegal mix of collations (ascii_bin,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation '='
charset_connection mám pritom utf8, tak keď už hodil chybu, prečo chápe premennú ako latin1 a nie utf8 !?
latin1_swedish_ci berie z nastavenia server_collation (konfig servera neovplyvním).
??? Znamená to, že ak odovzdávam procedúram textové hodnoty a mám nastavené connection_charset = utf8, tak sa z neho najprv prevedú na server_charset (v mojom pípade latin1) a v procedúre sa pracuje s nimi ďalej pracuje iba v danom charsete ???
Otázka 2
Prečo sa prevod pre porovnávanie nevykonal automaticky ?
explicitne funguje:
create procedure pr_pokus (search varchar(32))
BEGIN
SELECT * FROM pokus where pokus.stlpec1 = CONVERT(search using ascii)
END
verzia mysql 5.0.45
Vopred ďakujem za každý nápad, postreh, myšlienku, ...