none
MSSQL Codierung ändern RRS feed

  • Frage

  • Hallo,

    ich habe einige Zeilen in meine MSSQL Datenbank importiert, allerdings ist mir nun aufgefallen, dass irgendetwas bei der Codierung nicht stimmt, da ich seltsame Einträge angezeigt bekomme.

    Hier mal ein Bsp:

    Analyse &'26; Reporting   
    Planung &'26; Simulation

    Eigentlich sollte dort statt &'26 ein & Zeichen stehen. Wie kann ich in MSSQL die Codierung auf UTF 8 oder 16 ändern, sodass diese Zeichen richtig dargestellt werden?

    Mittwoch, 18. April 2012 14:15

Antworten

  • Hi Jeff,

    ich stand heute vor einer sehr ähnlichen herausforderung und musst da an diesen Forenbeitrag denken, ich habe mal Google nach deinem Dateiformat bemüht und mit einer meine Abrage auf eine *.tmx file umgebaut :-)

    SQL Script:

     declare @XML as xml 
    
     select @XML = IV.BulkColumn
     from OpenRowSet (BULK 'd:\test.tmx', SINGLE_BLOB) AS IV;
    
     select 
    	x.i.value('../@tuid','int') tuid,
    	x.i.value('../@datatype','varchar(255)') datatype,
    	x.i.value('@lang','varchar(2)') lang,
        x.i.value('.', 'varchar(max)') as seg 
     from @XML.nodes('tmx/body/tu/tuv') as x(i) 

    Um die Problematik mit den HTML Tags zu lösen, kannst du bei Google mal nach HTML Strip Funktionen suchen, diese kannst du dann auf die Spalte 'seg' anwenden, alternativ kannst du natürlich auch REPLACE() verwenden.

    ich hoffe es Hilft

    Theo

    Dienstag, 24. April 2012 22:28
  • Hallo Jeff

    Jeff_GER wrote:

    Habe das ganze mit dem Tool "Data Import for SQL Server" importieren
    lassen. Ursprünglich kommen die Einträge aus einer .tmx Datei, welche ich
    mit Olifant als .txt. exportieren lassen habe. Codiert ist die .tmx Datei
    in UTF-16. Die exportierte .txt, laut Windows, UTF-8.

    Ich vermute, das steht dort bereits so in der XML Datei drin, da diese XML codiert ist. Mit falscher Codierung hat dies nichts zu tun, lediglich damit, dass eben in XML versucht wird, auf Sonderzeichen zu verzichten und diese in eine Web-fähige Form zu bringen.

    Wenn Du das raushaben willst, wirst Du wohl eine HTML decodierung über die Felder laufen lassen und die kodierten Sonderzeichen durch die richtigen Zeichen ersetzen müssen. Einige verschachtelte REPLACE() Aufrufe in einen Update Statement sollten das lösen können.

    Die HTML Zeichenreferenz findest Du hier:
    http://de.selfhtml.org/html/referenz/zeichen.htm

    Gruss
    Henry

    Donnerstag, 19. April 2012 04:33

Alle Antworten

  • Hi,

    Was für einen Datentyp hat denn die Spalte?

    in was für einer Codierung ist die Datei die du importiert hast?

    wie hast du die Datei importiert?

    mittels BCP oder SSIS in beiden fällen kannst du auch eine Codepage mitgeben.

    ich würde die Datei in UTF-8 Datei in UTF-16 konvertieren und dann mittels BCP und der -w Option importieren.

    bcp http://msdn.microsoft.com/en-us/library/ms162802.aspx , http://msdn.microsoft.com/en-us/library/ms190919.aspx

    SSIS File Connection Manager http://msdn.microsoft.com/en-us/library/ms140266.aspx

    Viele Grüße

    Theo

    Mittwoch, 18. April 2012 14:58
  • Habe das ganze mit dem Tool "Data Import for SQL Server" importieren lassen. Ursprünglich kommen die Einträge aus einer .tmx Datei, welche ich mit Olifant als .txt. exportieren lassen habe. Codiert ist die .tmx Datei in UTF-16. Die exportierte .txt, laut Windows, UTF-8.

    Mir ist allerdings aufgefallen, dass in der .tmx Datei noch &amp statt &'26; an der Stelle des & Zeichens steht. Scheinbar gibt es also schon ein Problem mit der Konvertierung von UTF 16 zu 8 und MSSQL hat damit garnichts zu tun... Werde ich wohl mal wieder ein paar Stündchen mit Trial & Error verbringen müssen, bis es durch Zufall irgendwann mal richtig klappt :D

    Mittwoch, 18. April 2012 15:05
  • Habe das ganze mit dem Tool "Data Import for SQL Server" importieren lassen. Ursprünglich kommen die Einträge aus einer .tmx Datei, welche ich mit Olifant als .txt. exportieren lassen habe. Codiert ist die .tmx Datei in UTF-16. Die exportierte .txt, laut Windows, UTF-8.

    Mir ist allerdings aufgefallen, dass in der .tmx Datei noch &amp statt &'26; an der Stelle des & Zeichens steht.

    keine Bange, dass ist nur eine unterschiedliche Darstellung des gleichen Zeichens in XML. Du kannst entweder ein Zeichen direkt eingeben solange es nicht der XML Syntax wiederspricht - z.b & oder auch <> etc. oder Du kannst den Wert als Hexadezimalwert mit &'26; uebergeben oder wenn es ein spezielles Zeichen ist, gibt es dafuer auch eine textuelle Beschreibung und dies waere bei "&" eben &amp;

    Analyse &'26; Reporting   
    Planung &'26; Simulation

    sind da jetzt Werte die Du im Inputfile siehst, oder die Werte welche Du in der DB siehst ? hast Du das korrekte Formatfile / Type angegeben ?

    siehe Use a Format File to Bulk Import Data (SQL Server)

    Mittwoch, 18. April 2012 17:03
  • Hallo Jeff

    Jeff_GER wrote:

    Habe das ganze mit dem Tool "Data Import for SQL Server" importieren
    lassen. Ursprünglich kommen die Einträge aus einer .tmx Datei, welche ich
    mit Olifant als .txt. exportieren lassen habe. Codiert ist die .tmx Datei
    in UTF-16. Die exportierte .txt, laut Windows, UTF-8.

    Ich vermute, das steht dort bereits so in der XML Datei drin, da diese XML codiert ist. Mit falscher Codierung hat dies nichts zu tun, lediglich damit, dass eben in XML versucht wird, auf Sonderzeichen zu verzichten und diese in eine Web-fähige Form zu bringen.

    Wenn Du das raushaben willst, wirst Du wohl eine HTML decodierung über die Felder laufen lassen und die kodierten Sonderzeichen durch die richtigen Zeichen ersetzen müssen. Einige verschachtelte REPLACE() Aufrufe in einen Update Statement sollten das lösen können.

    Die HTML Zeichenreferenz findest Du hier:
    http://de.selfhtml.org/html/referenz/zeichen.htm

    Gruss
    Henry

    Donnerstag, 19. April 2012 04:33
  • sind da jetzt Werte die Du im Inputfile siehst, oder die Werte welche Du in der DB siehst ? hast Du das korrekte Formatfile / Type angegeben ?

    Das sind die Werte, die sowohl im Inputfile (.csv), als auch in der DB stehen. In der XML steht dann die HTML Codierung mit &amp.

    Freitag, 20. April 2012 07:27
  • Wenn Du das raushaben willst, wirst Du wohl eine HTML decodierung über die Felder laufen lassen und die kodierten Sonderzeichen durch die richtigen Zeichen ersetzen müssen. Einige verschachtelte REPLACE() Aufrufe in einen Update Statement sollten das lösen können.

    Das wäre ja nur in der DB direkt möglich, oder kann man in XML auch Update Statements machen?! In der DB steht aber nicht mehr die HTML Codierung, also z.B. &amp, sondern eben die andere mit &'26. Von dieser Sorte konnte ich in dem Referenzlink keine Zeichen entdecken, also würde ich davon ausgehen, dass dies keine HTML Codierung ist?
    Freitag, 20. April 2012 07:32
  • Hi,

    &'26 ist der Hex Wert von &amp, ich habe hier eine Liste gefunden. http://htmlhelp.com/reference/html40/entities/special.html

    Informationen zu XML und SQL Server findest du hier: http://msdn.microsoft.com/de-de/library/bb522493(v=sql.105).aspx

    Viele Grüße

    Theo

    Freitag, 20. April 2012 08:02
  • Hi Jeff,

    ich stand heute vor einer sehr ähnlichen herausforderung und musst da an diesen Forenbeitrag denken, ich habe mal Google nach deinem Dateiformat bemüht und mit einer meine Abrage auf eine *.tmx file umgebaut :-)

    SQL Script:

     declare @XML as xml 
    
     select @XML = IV.BulkColumn
     from OpenRowSet (BULK 'd:\test.tmx', SINGLE_BLOB) AS IV;
    
     select 
    	x.i.value('../@tuid','int') tuid,
    	x.i.value('../@datatype','varchar(255)') datatype,
    	x.i.value('@lang','varchar(2)') lang,
        x.i.value('.', 'varchar(max)') as seg 
     from @XML.nodes('tmx/body/tu/tuv') as x(i) 

    Um die Problematik mit den HTML Tags zu lösen, kannst du bei Google mal nach HTML Strip Funktionen suchen, diese kannst du dann auf die Spalte 'seg' anwenden, alternativ kannst du natürlich auch REPLACE() verwenden.

    ich hoffe es Hilft

    Theo

    Dienstag, 24. April 2012 22:28
  • Hallo Jeff_GER,

    Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert


    Robert Breitenhofer, MICROSOFT  Twitter Facebook
    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Dienstag, 15. Mai 2012 09:36
    Moderator