• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Import pliku TXT (separator TAB) do phpMyAdmin - błąd #1064

0 głosów
197 wizyt
pytanie zadane 9 kwietnia w SQL, bazy danych przez ch.damian Nowicjusz (120 p.)

Witam. Przygotowuję się do matury z informatyki, zadania z baz danych rozwiązuję za pomocą MySQL (XAMPP, phpMyAdmin). W zadaniu 6 z matury rozszerzonej z czerwca 2019 roku natknąłem się na problem z importem pliku "oferty.txt". Dane w tym pliku są oddzielone znakiem tabulacji, pierwszy wiersz to wiersz nagłówkowy.

Przykładowy fragment pliku oferty.txt:

Id_oferty  Woj           Status  Pow  L_pokoi  L_laz Cena    Data_zglosz Id_agenta
AB536MN    lodzkie       S       120  3        1     350000  2016-01-15  8
AB537DT    dolnoslaskie  A       100  3        2     215000  2016-01-25  6
AB539DN    mazowieckie   S       112  4        1     379000  2016-01-25  4

Plik importowałem przez zakładkę Import w phpMyAdmin, ustawiając format na "CSV", a separator na "\t". Dostałem błąd o takiej treści:

CREATE TABLE IF NOT EXISTS `pr 2019 czerwiec`.`oferty` (`Id_oferty` varchar(15), `Woj` varchar(39), `Status` varchar(3), `Pow` varchar(7), `L_pokoi` varchar(3), `L_laz` varchar(3), `Cena` varchar(13), `Data_zglosz` varchar(21), `Id_agenta` varchar(5)) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;;

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '`I' at line 1"

Pozostałe 3 pliki z tego zadania udało mi się zaimportować bez problemu.

Aby naprawić problem próbowałem:

  • zmiany kodowania (z UTF-8 na Windows-1250, ISO-8859-2)
  • uprzedniego utworzenia tabeli i importu danych do tej tabeli
  • usunięcia pierwszego wiersza pliku "oferty.txt" - tego z nagłówkami kolumn

Czy ktoś wie, co może powodować ten problem i jak poprawnie zaimportować ten plik?

1 odpowiedź

0 głosów
odpowiedź 9 kwietnia przez neo1020 Stary wyjadacz (10,530 p.)
edycja 9 kwietnia przez neo1020

Najprawdopodobniej problem jest w kodowaniu, ten plik zapisany jest jako UTF-16 (z BOM) a wszystkie inne jako UTF-8.

PHPMyAdmin wywala błąd, bo próbuje czytać 16-bitowe znaki jako 8-bitowe dlatego inne pliki działają a ten nie

Przekonwertuj na UTF-8 bez BOM np. Notepad++, wejdź w menu Formatowanie -> Konwertuj na format UTF-8 (bez BOM) i zapisz.

Neo@Neo MINGW64 ~/Downloads/informatyka-2019-czerwiec-matura-rozszerzona-zalaczniki/MIN-R2A1P-193_dane
$ for f in *; do file "$f"; done
agenci.txt: ASCII text, with CRLF line terminators
klienci.txt: ASCII text, with CRLF line terminators
liczby.txt: ASCII text, with CRLF line terminators
liczby_przyklad.txt: ASCII text, with CRLF line terminators


oferty.txt: Unicode text, UTF-16, little-endian text, with CRLF line terminators


pierwsze.txt: ASCII text, with CRLF line terminators
pierwsze_przyklad.txt: ASCII text, with CRLF line terminators
pogoda.txt: ASCII text, with CRLF line terminators
zainteresowanie.txt: ASCII text, with CRLF line terminators

albo bez konwertowania  wybierz utf-16 też działa jak niżej

 

i taka mała rada zamiast `pr 2019 czerwiec` użyj pr_2019_czerwiec, spacje w nazwach to proszenie się o błędy

komentarz 10 kwietnia przez ch.damian Nowicjusz (120 p.)
Zaimportowałem jako UTF-16 i działa, dzięki :)

Na właściwej maturze nie będzie dostępu do Notepad++ więc jeżeli taki problem się pojawi to będę próbować import z różnym kodowaniem, aż do skutku
komentarz 12 kwietnia przez Oscar Nałogowiec (29,420 p.)
edycja 12 kwietnia przez Oscar
A jakie są dostępne narzędzie na maturze? Fajniej, zamiast strzelać na ślepo, może lepiej będzie spróbować nawet ręcznie rozpoznać kodowanie. UTF-16 to format w którym znaki zapisane są na 16-bitach - każda literka zajmuje 2 bajty, a na początku jest FF FE (lub odwrotnie) więc sprawdzenie zawartości pliku jakimś prostym narzędziem typu hexdump lub cat/type zwykle wystarcza by rozpoznać taką sytuację.

Problem z kodowaniem to dziwna sytuacja w przypadku, gdy, zgodnie z tym co zacytowano, plik jest zapisany w ogóle bez polskich literek i wystarczyłoby 7-bitowe ASCII.

Podobne pytania

–2 głosów
0 odpowiedzi 337 wizyt
pytanie zadane 6 stycznia 2024 w SQL, bazy danych przez Jakub005 Początkujący (310 p.)
0 głosów
1 odpowiedź 3,563 wizyt
0 głosów
1 odpowiedź 542 wizyt

93,741 zapytań

142,677 odpowiedzi

323,294 komentarzy

63,323 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...