Μετατροπή Backup SQL αρχείων από latin1 σε greek

Βοήθεια λύσεις και νέα από τον χώρο των open source ή έτοιμων εφαρμογών που έχουν φτιαχτεί με την PHP όπως oscommerce, κ.α.

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
Pavel
Honorary Member
Δημοσιεύσεις: 1046
Εγγραφή: 08 Αύγ 2003 00:05
Τοποθεσία: UK

Μετατροπή Backup SQL αρχείων από latin1 σε greek

Δημοσίευση από Pavel » 17 Οκτ 2009 15:39

Μερικές φορές όταν το collation μιας βάσης είναι latin1 κάνουμε export με το phpMyAdmin (με παλαιότερες εκδόσεις τουλάχιστον), η εξαγωγή "χαλάει" τα ελληνικά και κατά το import αυτά δεν εμφανίζονται σωστά.

Το παρακάτω κομμάτι κώδικα, διορθώνει αυτό το πρόβλημα.

Μετατροπή 'χαλασμένου' backup αρχείου
(δεν ξέρω αν ισχύει για όλα, αλλά στην συγκεκριμένη περίπτωση με latin1 λειτουργεί. Με μικρές παραλλαγές, θα λειτουργεί και σε άλλα αρχεία)

Οδηγίες: Alt-F11 σε οποιαδήποτε εφαρμογή του Office, Paste τις functions, Ctrl-G για να εμφανιστεί το Immediate window και γράφουμε:

Κώδικας: Επιλογή όλων

Call ConvertDB("C:\prin.sql", "C:\meta.sql")

Κώδικας: Επιλογή όλων

Option Explicit

Public Sub ConvertDB(ByVal inFile As String, ByVal outFile As String)
    Dim arData()    As Byte
    Dim i           As Long
    Dim fn          As Long
    Dim szChar      As String
    
    Call LoadFileToArray(inFile, arData())
    
    If UBound(arData) = 0 Then
        MsgBox "File is empty (?)", vbExclamation
        Exit Sub
    End If
    
    fn = FreeFile
    Open outFile For Output As #fn
    
    For i = 0 To UBound(arData)
        If i Mod 10000 = 0 Then
            Debug.Print Int(i / UBound(arData) * 100) & "%"
            DoEvents
        End If
        
        If arData(i) = 195 Then
            szChar = Chr(arData(i + 1) + 64)
            i = i + 1
        ElseIf arData(i) = 194 Then
            If arData(i + 1) = 182 Then
                szChar = Chr(162)   'Ά
            Else
                szChar = Chr(arData(i + 1))
            End If
            i = i + 1
        Else
            szChar = Chr(arData(i))
        End If
        Print #fn, szChar;
    Next i
    
    Close #fn
    
    Debug.Print "100%"
End Sub

Public Sub LoadFileToArray(ByVal szFile As String, ByRef outArray() As Byte)
    Dim fn  As Long
    
    Erase outArray(): ReDim outArray(0) As Byte
    
    If Not FileExists(szFile) Then Exit Sub
    
    fn = FreeFile
    Open szFile For Binary As #fn
        ReDim outArray(LOF(fn) - 1) As Byte
        Get #fn, 1, outArray()
    Close #fn
End Sub

Public Function FileExists(ByVal szFile As String) As Boolean
    On Error Resume Next
    
    Dim lSize   As Long
    
    Err.Clear
    lSize = FileLen(szFile)
    FileExists = (Err.Number = 0)
    Err.Clear
End Function
Τελευταία επεξεργασία από το μέλος Pavel την 14 Νοέμ 2009 22:39, έχει επεξεργασθεί 2 φορές συνολικά.
Εσύ είσαι τρελός.

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Μετατροπή Backup SQL αρχείων από latin1 σε greek

Δημοσίευση από korgr » 17 Οκτ 2009 16:33

Pavel, απλα θεός! :clap:
function saved!!!! :D

Απάντηση

Επιστροφή στο “PHP έτοιμες εφαρμογές”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες