Zobrazují se příspěvky se štítkemmysql. Zobrazit všechny příspěvky
Zobrazují se příspěvky se štítkemmysql. Zobrazit všechny příspěvky

čtvrtek 10. května 2012

Moje první MySQL procedura

Včera jsem napsal svoji první MySQL proceduru. Měl za úkol vygenerovat náhodné číslo, které má 10 číslic a je jedinečné v celé databázi.

create procedure generaterc()
begin
declare _rc varchar(255);  --tady jsem měl chybu
declare _id int;
set _id = 1;
while _id < ((select count(*) from patient) + 1) do
    begin
    set _rc = cast(FLOOR(1000000000 + (RAND() * 8999999999)) AS char);  
    if not exists(select * from patient where patient.rc = _rc) then
        update patient set rc=_rc where id=_id;
        set _id=_id+1;          
    end if;
    end;
end while;  
end
Poznámka pod čarou:
Proměnné, které chceme pak dávat jako hodnotu do sloupců databáze, by měly mít stejný datový typ jako ten sloupec. Měl jsem v tabulce sloupec rc, který byl typu varchar(255). Proměnnou jsem však deklaroval jako declare _rc char; a to způsobilo nekompatibilní dat. typ. http://stackoverflow.com/questions/10524573/mysql-procedure-random-number-generating

Zjištění:
V databázi s 82 618 řádky funkce vůbec nedoběhne do konce, a to jsem ji nechal běžet přes 30 min. Nakonec jsem ty čísla náhodně negeneroval :)

středa 15. února 2012

Grails aplikace na Jelastic.com

Deployment na tento server je vcelku jednoduchý. Existuje totiž oficiální návod přímo od Jelastic. Co v návodu chybí, je konfigurace databáze. Na to však existuje jiný návod, který lze aplikovat pro Grails aplikace. Po rozběhnutí a první navštívení aplikace vypadá vše ok, ale pak ouvej. Když jsem si chtěl vytvořit záznam s českými znaky, do MySQL databáze se místo nich uložily "?".
Moje první podezření padlo na databázi a nastavení Collation. Měl jsem nastavený utf-8-cs, takže to bylo v pořádku. I jednotlivé tabulky a řádky byly stejně nastavené. Takže tím to nebylo.
Po chvíli googlování jsem měl další podezření. Mohlo by to nastat při zasílání požadavku ze stránek, kdy české znaky se kódují jako entity. Vypsal jsem si tedy v controlleru tyto hodnoty, a zjistil jsem, že to také nebylo ono.
Nakonec jsem našel tuto diskusi: http://stackoverflow.com/questions/3064644/character-encoding-problem-spring (big up této diskusi). Stačilo doplnit na konci jdbc url parametr ?useUnicode=yes&characterEncoding=UTF-8