Menu

#3 Nespustí se dlouhý INSERT příkaz

closed-fixed
None
5
2009-11-06
2009-08-17
Anonymous
No

Pokud do 'SQL přikaz' zadám dlouhý INSERT příkaz (např. data z exportu z lokální databáze - cca 20kB, většina typu TEXT), nespustí se. Nespustí se ani při odeslání přes soubor. Pokud se ho pokusím spustit s ostatními příkazy, spustí se všechny příkazy před ním, ale za ním nic (včetně onoho INSERT), nenapíše se ani žádná chyba, prostě jakoby víc příkazů neexistovalo. Pokud se pokusím odeslat samotný příkaz INSERT, dostanu okamžitě chybu prohlížeče "Připojení bylo ukončeno vzdáleným serverem".

Discussion

  • Jakub Vrána

    Jakub Vrána - 2009-08-17

    Nedaří se mi to reprodukovat. Zkontrolujte prosím velikost konfigurační direktivy max_allowed_packet a zkuste příkaz spustit také přímo z MySQL konzole.

     
  • Jakub Vrána

    Jakub Vrána - 2009-08-17
    • assigned_to: nobody --> jakubvrana
    • status: open --> pending
     
  • Nobody/Anonymous

    max_allowed_packet = 1M
    Ten stejný příkaz lze bez problému spustit v MySQL konzoli i v phpMyAdmin.
    V Admineru ale stále nic, ani na desátý pokus v úplně jiném prohlížeči.

    Ale zjistil jsem, že tento problém přetrvává pouze u mě na lokálním serveru, na vzdáleném se příkaz normálně spustí. Nemůže jít o nějaký problém s rozdílnou verzí MySQL nebo PHP? Na lokálním serveru mám MySQL 5.1.30, kdežto na vzdáleném 5.0.51a. Na lokálním také běží PHP 5.3, na vzdáleném 5.2.10.

    Jak jsem psal o tom, že se nespustí ostatní příkazy, dokonce se ani nevykreslí zbytek stránky. Jak Adminer dojde k tomu dlouhému příkazu, prostě ukončí spojení s prohlížečem a zbytek stránky už nepošle.

     
  • Nobody/Anonymous

    • status: pending --> open
     
  • Jakub Vrána

    Jakub Vrána - 2009-08-19
    • status: open --> pending
     
  • Jakub Vrána

    Jakub Vrána - 2009-08-19

    Zkuste prosím zjistit maximální délku příkazu, který se ještě provede. Třeba nás to někam navede.

     
  • Nobody/Anonymous

    Zjistil jsem, že nejde o délku příkazu, ale pokud se pokusím do sloupce datového typu TEXT vložit hodnotu, která je větší než 8kB přesně (8192 bytů) - např. více než 4096 znaků v UTF-8.

     
  • Nobody/Anonymous

    • status: pending --> open
     
  • Nobody/Anonymous

    Špatně se chová např. tento sql soubor:
    http://leteckaposta.cz/572902041

    Pokud příkazy spustím pomocí nahrání souboru, provedou se příkazy do prvního INSERTU včetně, pokud příkazy do textového pole nakopíruju z notepadu, neprovede se ani ten první INSERT.

     
  • Jakub Vrána

    Jakub Vrána - 2009-08-19
    • status: open --> closed
     
  • Jakub Vrána

    Jakub Vrána - 2009-08-19

    Díky za funkční ukázku, chybu jsem opravil v SVN.

     
  • Nobody/Anonymous

    Já bych řekl, že může souviset nejenom s velikostí, ale i použitím zpětného lomítka v příkazu.
    V mém případě (localhost, EasyPHP 3.1) chybu neoznámí Adminer, ale Apache - a sice "Spojení přerušeno".

     
  • Nobody/Anonymous

    Je dost pravděpodobné, že to bude souviset se zpětnáým lomítkem, možná bude i chyba v mysqli. Ale i když jsem stáhl poslední verzi z SVN, moc to nepomohlo. Daný příklad prikaz.sql sice funguje, ale stačí INSERT o jedno \a prodloužit a zase mi to vrací chyby.

    prikaz2.sql: http://leteckaposta.cz/125666245

     
  • Jakub Vrána

    Jakub Vrána - 2009-08-20
    • status: closed --> open
     
  • Jakub Vrána

    Jakub Vrána - 2009-08-20

    Díky za důslednost. Doufám, že se to podařilo vyřešit pomocí ungreedy RE, ale na pravou příčinu problému jsem po pravdě řečeno nepřišel.

     
  • Jakub Vrána

    Jakub Vrána - 2009-08-20
    • status: open --> closed
     
  • Nobody/Anonymous

    Je mi to líto, ale stále vám nemůžu dát pokoj. Je pravda, že mou uvedený prikaz2.sql už funguje. Ale stále nemůžu rozchodit i úplně triviální příkazy, např:

    http://leteckaposta.cz/107435172

    (obsahuje jen šestkrát sekvenci \r\n, jinak znaky x a mezeru, prostě běžná data typu TEXT)

     
  • Jakub Vrána

    Jakub Vrána - 2009-08-21

    Díky za trpělivost. Vzdal jsem to a celé jsem to předělal. Díky tomu jsem navíc objevil chybu, ke které docházelo při neuzavřeném /*.

     
  • Jakub Vrána

    Jakub Vrána - 2009-11-06
    • status: closed --> closed-fixed
     

Log in to post a comment.