Τρίτη, 22 Δεκεμβρίου 2015

Εισαγωγή δεδομένων UTF-8 στον SQL Server...

Το σημερινό post γράφεται για δύο λόγους: Ο πρώτος είναι ότι όλοι όσοι έχουμε δουλέψει με δεδομένα σε γλώσσες άλλες από αυτές που χρησιμοποιούν το Λατινικό αλφάβητο, ξέρουμε πολύ καλά πόσο μεγάλος μπελάς είναι... Ο δεύτερος είναι ότι επειδή έφαγα σχεδόν δυο μέρες για να καταφέρω να φορτώσω ένα αρχείο txt tab delimited σε μια βάση SQL Server 2008 R2, θέλω να θυμάμαι τον λόγο και την αιτία της ταλαιπωρίας μου έτσι ώστε να μην περάσω τα ίδια αν χρειαστεί να το επαναλάβω μετά από καιρό και να βοηθηθεί και κάποιος άλλος που μπορεί να έχει το ίδιο πρόβλημα και να σπάει το κεφάλι του, όπως έκανα εγώ...

Έστω λοιπόν ότι έχετε ένα txt αρχείο με δεδομένα τα οποία περιέχουν πεδία στα ελληνικά, το encoding του αρχείου είναι UTF-8 και δουλεύετε σε ένα μηχάνημα που το locale του είναι Greek... Δοκιμάζοντας να κάνετε import το αρχείο σε μια βάση SQL Server μέσω του Management Studio πιθανότατα δεν θα το καταφέρετε με την πρώτη... Κατά πάσα πιθανότητα το error που θα συναντήσετε οι περισσότεροι θα αναφέρει ότι υπάρχουν δύο encodings στο αρχείο, ότι το UTF-8 είναι unsupported στον SQL Server (δεν ξέρω αν αυτό ισχύει για όλες τις εκδόσεις του) και διάφορα άλλα ενοχλητικά μηνύματα...

Το πρόβλημα λύνεται με τον εξής απλό τρόπο:

Όταν σετάρουμε τα options του Import Wizard στο Management Studio πρέπει να κάνουμε τις παρακάτω επιλογές:

mssql2008-import-wizard-1

mssql2008-import-wizard-2

Με λίγα λόγια, πρέπει να ορίσουμε στον Import Data Source Wizard το locale σε "English (United States)" και το encoding σε "65001 (UTF-8)"... Κατόπιν, στο μενού Advanced, πρέπει να ορίσουμε το data type όλων των πεδίων σε "Unicode_string [DT_WSTR]"... Στην συνέχεια πατάμε διαρκώς Next μέχρι να φτάσουμε στο τέλος του Wizard... Τα δεδομένα θα φορτωθούν στη βάση μας, στο default αρχείο που θα παράξει ο Wizard και από εκεί και πέρα είναι πολύ απλό να κάνεις όλα τα απαραίτητα transformations και να τα φορτώσεις στον τελικό πίνακα με τα σωστά data types... Τόσο απλά!

Οι εικόνες και το credit ανήκουν στην GeoDataSource ...

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου