Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z explodem tekstu w funkcji MySQL
Czadus
post
Post #1





Grupa: Zarejestrowani
Postów: 164
Pomógł: 4
Dołączył: 29.08.2008

Ostrzeżenie: (0%)
-----


Witam, mam problem, stworzyłem funkcję za pomocą której dodając tekst rozdzielony spacjami, zostanie on dodany do bazy danych, każdy wyraz w osobnym rekordzie. Wszystko działa poprawnie, poza rozdzielaniem niektórych wyrazów z polskimi znakami, np. wysyłając treść:

"Hrabia wracał do siebie lecz konia wstrzymywał Głową coraz w tył kręcił w ogród się wpatrywał I raz mu się zdawało".

W stworzonym zapytaniu dodającym kolejne wyrazy do bazy danych, niektóre słowa zostają ucięte:

Kod
INSERT INTO
    ewolon_search_index(`id`,`idSearch`,`word`,`lang`)
VALUES
    ('','1','Hrabia',0),('','1','wracał',0),('','1','siebie',0),('','1','lecz',0),
    ('','1','konia',0),('','1','wstrzymywał',0),('','1','łową',0),('','1','raz',0),
    ('','1','tył',0),('','1','ręcił',0),('','1','ogród',0),('','1','ię',0),
    ('','1','patrywał',0),('','1','raz',0),('','1','się',0),('','1','dawało',0)


Kod
CREATE DEFINER=`root`@`localhost` FUNCTION `_add2Index`(`idArticle` INT, `lang` INT, `text2Index` TEXT)
    RETURNS text
    LANGUAGE SQL
    DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
    DECLARE queryText TEXT;
    DECLARE counter INT;
    
    SET CHARSET utf8;
    SET NAMES `utf8` COLLATE `utf8_polish_ci`;
    
    SET counter = 0;
    SET queryText = "INSERT INTO ewolon_search_index(`id`,`idSearch`,`word`,`lang`) VALUES";
    
    SET @saTail = text2Index;
    
    loop_index: WHILE @saTail!='' DO
        SET @sHead = SUBSTRING_INDEX(@saTail, ' ', 1);
        SET @saTail = SUBSTRING( @saTail, LENGTH(@sHead)+2);
        
        IF LENGTH(@sHead)>2 THEN
            
            IF counter > 0 THEN
                SET queryText = CONCAT(queryText,",('','",idArticle,"','",@sHead,"',",lang,")");
            ELSE
                SET queryText = CONCAT(queryText,"('','",idArticle,"','",@sHead,"',",lang,")");
            END IF;
            
            SET counter = counter + 1;
        END IF;
        
        SET queryText = CONCAT(queryText,@saTail);
    END WHILE loop_index;
    
    RETURN queryText;
END


Szukam i szukam i już nie wiem co jest nietak, wydaje mi się, że wynika to z winy polskich niektórych polskich ogonków. W php treść wygląda poprawnie, jest ona wysyłana postem, wyświetla się tak, jak powinna, przy połączeniu z bazą danych mam ustawione:

"SET NAMES UTF8"

Jak wybrnąć z tego problemu??
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 26.09.2025 - 13:34