Τι είναι αυτό το εργαλείο;
Η αρχικοποίηση μιας βάσης δεδομένων δοκιμών, η φόρτωση μιας εξαγωγής υπολογιστικού φύλλου σε έναν πίνακα, ή η μετεγκατάσταση ενός μικρού συνόλου δεδομένων συχνά ξεκινά με τον ίδιο τρόπο: έχετε ένα αρχείο CSV και χρειάζεστε SQL. Αυτό το εργαλείο αναλύει το CSV σας (χρησιμοποιώντας τη γραμμή κεφαλίδας ως ονόματα στηλών) και κατασκευάζει μία δήλωση INSERT INTO που καλύπτει κάθε γραμμή δεδομένων, έτοιμη για επικόλληση σε έναν client βάσης δεδομένων.
Οι τιμές κειμένου τυλίγονται σε μονά εισαγωγικά με τα εσωτερικά εισαγωγικά να διαφεύγουν διπλασιαζόμενα (έτσι το O'Brien γίνεται O''Brien), που είναι ο τυπικός κανόνας διαφυγής κοινός στις MySQL, PostgreSQL και SQLite. Ένα κενό κελί CSV γράφεται ως η λέξη-κλειδί SQL NULL αντί για κενό string — αυτή είναι σκόπιμη επιλογή, καθώς ένα κενό κελί σε ένα υπολογιστικό φύλλο συνήθως σημαίνει "καμία τιμή" και όχι "ένα κενό κομμάτι κειμένου", και το NULL είναι αυτό που αναμένουν τα περισσότερα σχήματα για αυτό.
Το αν μια τιμή θα λάβει εισαγωγικά ή θα μείνει γυμνή αποφασίζεται από μια απλή ευρετική μέθοδο, όχι πραγματική συναγωγή τύπου: αν το κελί χωρίς κενά μοιάζει με απλό ακέραιο ή δεκαδικό αριθμό (προαιρετικά με αρχικό αρνητικό πρόσημο), γράφεται χωρίς εισαγωγικά· οτιδήποτε άλλο — συμπεριλαμβανομένων πραγμάτων που απλώς μοιάζουν με αριθμούς με επιπλέον χαρακτήρες, όπως τηλεφωνικοί αριθμοί ή ταχυδρομικοί κώδικες με αρχικά μηδενικά — παίρνει εισαγωγικά ως κείμενο. Αυτό κρατά το αποτέλεσμα ειλικρινές: είναι καλό σημείο εκκίνησης για μια μικρή εισαγωγή, όχι υποκατάστατο της επικύρωσης των δεδομένων σας έναντι του πραγματικού σχήματος του πίνακά σας πριν την εκτέλεση.
Πηγή: Η ανάλυση CSV ακολουθεί το RFC 4180, το πλησιέστερο σε επίσημο πρότυπο CSV· ο διπλασιασμός μονού εισαγωγικού για διαφυγή string είναι η κοινή σύμβαση που τεκμηριώνεται από τις MySQL, PostgreSQL και SQLite.
Γιατί να το χρησιμοποιήσετε;
- Προσαρμοσμένο όνομα πίνακα — ορίστε τον πίνακα προορισμού μία φορά, και κάθε γραμμή στοχεύει αυτόν τον πίνακα.
- Σωστή διαφυγή κειμένου — τα μονά εισαγωγικά μέσα σε τιμές διπλασιάζονται ώστε η SQL να μη χαλάει ή να περικόπτεται.
- Προβλέψιμος χειρισμός NULL — τα κενά κελιά γίνονται NULL αντί για κενό string, όπως οι περισσότερες βάσεις δεδομένων διακρίνουν τα ελλείποντα δεδομένα.
- Κοινή σύνταξη SQL — η μορφή INSERT INTO ... VALUES ... που παράγεται εδώ λειτουργεί χωρίς τροποποίηση σε MySQL, PostgreSQL και SQLite.
- 100% από την πλευρά του client — τα δεδομένα CSV σας (που μπορεί να περιλαμβάνουν εγγραφές πελατών ή επιχειρηματικά δεδομένα) αναλύονται και μετατρέπονται στον browser σας και δεν ανεβαίνουν πουθενά.
Πώς χρησιμοποιείται
- Επικολλήστε δεδομένα CSV με γραμμή κεφαλίδας, π.χ. name,age\nAlice,30\nBob,25.
- Εισαγάγετε το όνομα του πίνακα προορισμού (προεπιλογή my_table).
- Κάντε κλικ στο "Generate SQL".
- Αντιγράψτε τη δήλωση INSERT INTO ή κατεβάστε την ως αρχείο .sql, και εκτελέστε την στη βάση δεδομένων σας.
Παράδειγμα
Είσοδος
name,age,city
Alice,30,
Bob,,NYCΈξοδος
INSERT INTO `my_table` (`name`, `age`, `city`)
VALUES
('Alice', 30, NULL),
('Bob', NULL, 'NYC');Παρατηρήστε ότι τα κενά κελιά έγιναν NULL (όχι κενά strings), και η αριθμητική τιμή ηλικίας 30 έμεινε χωρίς εισαγωγικά ενώ κάθε τιμή κειμένου πήρε εισαγωγικά.
Πρακτικές συμβουλές
- Αρχικοποίηση τοπικής βάσης δεδομένων δοκιμών: εξάγετε ένα μικρό δείγμα ως CSV από ένα υπολογιστικό φύλλο, μετατρέψτε το εδώ, και εκτελέστε τη δήλωση INSERT στη βάση δεδομένων ανάπτυξής σας.
- Ελέγχετε πάντα τους τύπους στηλών πριν εκτελέσετε το παραγόμενο SQL σε πραγματικό πίνακα — αυτό το εργαλείο συνάγει αριθμητικό έναντι κειμένου με μια απλή ευρετική μέθοδο, όχι το πραγματικό σχήμα σας, οπότε μια στήλη ακεραίου που περιμένει συγκεκριμένη μορφή μπορεί να χρειάζεται χειροκίνητη προσαρμογή.
- Αν έχετε χιλιάδες γραμμές, η ενιαία πολυγραμμική δήλωση INSERT που παράγει αυτό το εργαλείο είναι ακόμα έγκυρη SQL, αλλά πολύ μεγάλες δηλώσεις μπορεί να φτάσουν το μέγιστο μέγεθος πακέτου μιας βάσης δεδομένων — χωρίστε το CSV σε μικρότερες παρτίδες αν συναντήσετε αυτό το όριο.
Γιατί NULL και όχι κενό string
Ένα συνηθισμένο λάθος όταν γράφετε χειροκίνητα σενάρια CSV-προς-SQL είναι να αντιμετωπίζετε κάθε κελί που λείπει ως κενό string ''. Αυτό είναι τεχνικά έγκυρο SQL, αλλά συνήθως δεν σημαίνει αυτό που θέλετε: μια στήλη ορισμένη ως ακέραιος θα απορρίψει το '' εντελώς, και ακόμα και σε μια στήλη κειμένου, το '' σιωπηλά σημαίνει κάτι διαφορετικό από το "δεν γνωρίζουμε αυτή την τιμή" στα περισσότερα σχέδια σχημάτων και ερωτήματα αναφορών (ένας έλεγχος WHERE column IS NULL δεν θα ταιριάξει με κενά strings, και το αντίστροφο). Η χρήση NULL για κενά κελιά ταιριάζει με τη σημασιολογία που αναμένουν οι περισσότερες βάσεις δεδομένων και ORM, και αποφεύγει σφάλματα τύπου όταν μια αριθμητική στήλη τυχαίνει να έχει ελλείπουσες τιμές σε κάποιες γραμμές.
Συχνές ερωτήσεις
Λειτουργεί αυτό με κάθε βάση δεδομένων SQL;
Η παραγόμενη σύνταξη — αναγνωριστικά με backtick, τιμές κειμένου με μονά εισαγωγικά, τυπικό INSERT INTO ... VALUES ... — είναι κοινή στις MySQL, PostgreSQL και SQLite. Η PostgreSQL δεν απαιτεί αυστηρά backticks γύρω από αναγνωριστικά (χρησιμοποιεί διπλά εισαγωγικά αν χρειάζεται καθόλου εισαγωγικά), αλλά τα ονόματα με backtick είναι ακίνδυνα και εκεί, εκτός αν έχετε ασυνήθιστα ονόματα στηλών που συγκρούονται με δεσμευμένες λέξεις. Δεν ακολουθείται κάποιο ενιαίο επίσημο πρότυπο SQL — απλώς η σύνταξη που λειτουργεί χωρίς τροποποίηση στις πιο κοινές βάσεις δεδομένων.
Γιατί ένα κενό κελί γίνεται NULL αντί για κενό string '';
Αυτή είναι σκόπιμη σχεδιαστική επιλογή: στις περισσότερες πραγματικές εξαγωγές CSV, ένα κενό κελί σημαίνει ότι η τιμή είναι άγνωστη ή μη εφαρμόσιμη, όχι κυριολεκτικά ένα κενό κομμάτι κειμένου. Το NULL είναι αυτό που αναμένουν τα περισσότερα σχήματα βάσεων δεδομένων. Αν η δική σας περίπτωση χρήσης χρειάζεται πραγματικά κενά strings, θα πρέπει να επεξεργαστείτε το παραγόμενο SQL χειροκίνητα για αυτές τις περιπτώσεις.
Πώς αποφασίζει το εργαλείο αν μια τιμή χρειάζεται εισαγωγικά;
Είναι μια απλή ευρετική μέθοδος, όχι πραγματική συναγωγή τύπου: αν ένα κελί χωρίς κενά αποτελείται μόνο από ψηφία (με προαιρετικό αρχικό αρνητικό πρόσημο και το πολύ μία υποδιαστολή), γράφεται χωρίς εισαγωγικά ως αριθμός. Οτιδήποτε άλλο παίρνει εισαγωγικά ως κείμενο. Αυτό σημαίνει ότι ένας ταχυδρομικός κώδικας όπως 00501 ή ένας τηλεφωνικός αριθμός θα αντιμετωπιστεί ως κείμενο μόνο αν έχει επιπλέον χαρακτήρες — ένα αρχικό μηδενικό μόνο του εξακολουθεί να αναλύεται εδώ ως αριθμητικό, οπότε ελέγξτε ξανά αναγνωριστικά όπως ταχυδρομικούς κώδικες και ID πριν εκτελέσετε το SQL).
Ανεβαίνουν τα δεδομένα μου πουθενά;
Όχι. Τόσο η ανάλυση όσο και η δημιουργία SQL γίνονται σε JavaScript στον browser σας — τίποτα δεν στέλνεται σε server, κάτι που το κάνει ασφαλές για χρήση με εξαγόμενα αρχεία πελατών ή επιχειρηματικά αρχεία.
Μπορεί να χειριστεί τιμές CSV που περιέχουν κόμματα ή εισαγωγικά;
Ναι. Το CSV αναλύεται με έναν κατάλληλο parser πεδίων με εισαγωγικά που κατανοεί κόμματα, αλλαγές γραμμής και διπλασιασμένα εισαγωγικά μέσα σε πεδία με εισαγωγικά — όχι έναν απλοϊκό διαχωρισμό με κόμμα — οπότε ένα πεδίο όπως "Smith, John" διαβάζεται ως μία τιμή, όχι διαχωρισμένο σε δύο στήλες.