MS SQL Server 2012, nvarchar-Spalte mit Unicode dez. funktioniert nicht

Mitglied: Berner

Berner (Level 1) - Jetzt verbinden

02.04.2021 um 20:14 Uhr, 590 Aufrufe, 11 Kommentare, 1 Danke

Hi
Ich habe eine Tabelle in MS SQL Server 2012 Express Edition auf einem Windows 7 PRO PC in einem isolierten Netzwerk ohne Internetzugang. Die Tabelle funktioniert auch tadellos, solange in den Spalten der Text auf Deutsch oder Englisch eingetragen wird. Die meisten Felder sind vom Datentyp nvarchar(256), so auch jene, die mir Probleme machen.

Neu sollen einige Spalten auch östliche Schriftzeichen enthalten: kyrillische, hebräische und arabische. Die Einträge habe ich anhand von dezimal Unicode-Tabellen im Format ✏ gemacht, wobei ich für das Kyrillische Zahlen von 1024 bis 1279 anstelle der 9999 eingesetzt habe, für das Hebräische Zahlen von 1425 - 1524 und für das Arabische solche zwischen 1536 und 1791.

Ein Eintrag lautet somit z.B. БеЛьІ&#1081 und sollte so aussehen: Белый, tut es aber nicht.

Die Tabellen-Einträge werden von einer Drucksoftware abgerufen. Ein Layout besteht aus festen Feldern und variablen Feldern. In den festen Feldern kann ich Einträge ganz unproblematisch direkt mit einer dieser drei Schriftzeichenarten machen. Die Inhalte der festen Felder sind im Layout selbst abgespeichert. Variable Felder beziehen sich aber auf die SQL Tabelle. Der Anwender trifft eine Auswahl und der Inhalt wird von dort bezogen.

1.) Das Layout und der Druck der festen Felder erfolgt korrekt. In den variablen Felder steht aber Б etc.
2.) Wenn ich den Datensatz mit like%% abrufe, stehen im Feld die Unicodes

Was mache ich falsch?

Danke für Euer Input.
Berner
Mitglied: ukulele-7
LÖSUNG 02.04.2021, aktualisiert um 23:36 Uhr
Ein leidiges Thema, treibt mich regelmäßig in den Wahnsinn.

Du hast zwar eine Spalte die Unicode speichern kann, deine Unicode-Zeichen sind aber tatsächlich in HTML codiert. Für SQL ist das kein Unicode sondern eine Zeichenkette a la ASCII. Wie genau schreibst du die Zeichen in die Tabelle?

Hier mal ein bischen Code zur Veranschaulichung:
https://stackoverflow.com/questions/49817637/how-to-decode-html-encoded- ...
Bitte warten ..
Mitglied: Berner
03.04.2021 um 19:24 Uhr
Hallo ukulele-7
Vielen Dank für Deine prompte Antwort. Ich bin jeweils erst so ab 18Uhr bis 23 Uhr aktiv im Forum.
Zitat von @ukulele-7:
Wie genau schreibst du die Zeichen in die Tabelle?
Ganz naiv:
- mit Browser von Internetexplorer und Login Tabelle holen
- mit "suchen" "Artikelname" (Spaltenname) "like%%" und Suchbegriff und "Daten zeigen von" Datensatz visualisieren
"ändern/bearbeiten" und im gewünschten Feld 1:1 БеЛ eintippen, Spalte links davon mit Auswahl NULL / (leer) / + / SQL auf (leer)
- speichern
Ich brauche also weder im Adminer 4.3.1 den Button SQL-Kommando noch das separate Programm SQL Server Management Studio dazu

Ich habe begriffen, dass das so falsch ist. Entweder brauche ich den HTML Encoder von SQLHTTP.NET oder ich muss die Eingabe in die Felder mit SQL Kommandos machen, wobei es mir noch nicht ganz klar ist wie.
Zitat von @ukulele-7:
DECLARE @string NVARCHAR(10);
SET @string = N'Б'
SELECT @string,cast(cast(@string AS XML) AS NVARCHAR(10));
--&#1041; Б</code>
Muss ich nun für jeden einzelnen Buchstaben eine Variable (@string) definieren, ihr den dezimalen Unicode zuweisen und mit Select ....die Konvertierung vornehmen?
Wie gelangt die Konvertierung ins richtige Feld des Datensatzen?
Muss da nur der Cursor drin stehen?
Entschuldige meine naiven Fragen..

Vielen Dank für Deine Präzisierung
Gruss Berner
Bitte warten ..
Mitglied: Berner
03.04.2021 um 20:06 Uhr
Vermutlich klapp auch die vereinfachte Eingabe (gemäss stack overflow):

select cast(cast(''&#1041;' as xml) as nvarchar(10))

Gruss von Berner
Bitte warten ..
Mitglied: Berner
03.04.2021 um 23:09 Uhr
Datenbank mit Browser geöffnet:
Wenn ich im Adminer folgende SQL Kommandos eingebe
select cast(cast(N'&#1041;' as xml) as nvarchar(10));
oder
select cast(cast('&#1041;' as xml) as nvarchar(10));

wird wohl oben im kleinen Antwortrechteck das Zeichen Б ausgegeben.
Wenn ich das Zeichen mit CTRL+C kopiere und in die Tabelle mit ändern/bearbeiten in die richtige Spalte einfüge sieht das Zeichen noch gut aus. Auch die weiteren Zeichen kann ich so anhängen. Wenn ich aber die Tabelle abspeichere und neu öffne sind in besagter Spalte wieder Fragezeichen.
Die Eingabe Deines Codes
DECLARE @string NVARCHAR(10);
SET @string = N'&#1041';
SELECT @string,cast(cast(@string AS XML) AS NVARCHAR(10));
ergibt mir leider beim Ausführen folgenden Fehler 137 aus: < Must declare the scalar variable "@string" >

Habe im Netz noch die Bemerkung gefunden: Bei Abfragen mit dem SSMS soll die Ausgabe von GRID auf TEXT geändert werden, weil je nach Schriftart GRID den Unicode nicht richtig anzeigt. Mit CTR + T oder rechter Maustaste Result to text kann das behoben werden.

Wünsche Dir und Deinen Frohe Ostern
Berner
Bitte warten ..
Mitglied: SachsenHessi
04.04.2021 um 20:32 Uhr
Schreibe mal:
VG
SH
Bitte warten ..
Mitglied: Berner
04.04.2021 um 22:36 Uhr
Guten Abend SachsenHessi
Habe Code abgeändert und ein Semikolon eingefügt nach der Zahl. Meldet aber leider immer noch den selben Fehler


Gruss
Berner
Bitte warten ..
Mitglied: MadMax
LÖSUNG 06.04.2021, aktualisiert um 16:58 Uhr
Hallo Berner,

Dein Code ist fehlerfrei, im SSMS funktioniert er. Das einzige, was ich mir jetzt vorstellen kann ist, daß Adminer jede Zeile einzeln abschickt und nicht das Skript als ganzes verarbeitet. Das kannst Du ausprobieren, indem Du die Zeilenumbrüche entfernst, also:

Du mußt die Zeichen auch nicht einzeln umwandeln, Du kannst alle Zeichen in einen String packen.

Aber Du willst das ja sowieso in eine Tabelle schreiben, dann geht das auch direkt über einen insert- oder update-Befehl:

Danke übrigens ukulele, das mit dem Umwandeln der HTML-Codes kannte ich noch nicht (hab ich aber bis jetzt auch noch nicht gebraucht).

Gruß, Mad Max
Bitte warten ..
Mitglied: Berner
06.04.2021 um 16:47 Uhr
Hallo Mad Max
Danke für Deinen Beitrag. Ich habe über Ostern gearbeitet und nehme deshalb heute und ev. morgen frei und werde deshalb nicht sofort Stellung dazu nehmen können. Der Rechner steht nicht bei mir zuhause...
Gruss
Berner
Bitte warten ..
Mitglied: Berner
08.04.2021 um 22:44 Uhr
Hallo MadMax
Ich habe im SSMS mit dem von Dir angegebenen update Befehl den gewünschten Eintrag gemacht:
und mit der anschliessenden Überprüfung mit dem select Befehl
den richtigen gewünschten Eintrag erhalten: Белый
Ich habe den Eindruck, dass das die Lösung war. Mit Sicherheit weiss ich es erst morgen Freitagabend, da werde ich den Versuch mit der Drucksoftware machen, die diesen Tabellen-Eintrag in einem variablen Feld wiedergeben sollte. Melde mich dann nochmals.
Was die Eingabe ohne Zeilenumbrüche
anbelangt, die geht im SSMS prima, aber der adminer "schluckt" sie nicht: Fehlermeldung 2 x Must declare the scalar variable "@string"

Bei dieser Gelegenheit möchte ich auf einen wirklich gut beschriebenen Link für die wichtigsten SQL-Befehle hinweisen:

SQL_Update_Befehl

Inzwischen danke ich auch ukulele-7 und SachsenHesssi

Gruss aus dem Seeland in der Schweiz
Berner (Nicolas)
Bitte warten ..
Mitglied: Berner
09.04.2021 um 22:54 Uhr
Hallo MadMax, Hallo ukulele-7

Das Mysterium ist gelöst: Spezielle Einträge in einer SQL Tabelle, die in HTML-Kodierung (NCR dezimal) erfolgen müssen (Format &#1111;), können nur via SSMS und entsprechenden Befehlen wie update oder insert gemacht werden.
Beispiel:
Solche Einträge können nicht mit einem Internet-Browser erfolgen.
Viele einfache Anwender brauchen den Internet-Browser für Tabelleneinträge. Brauchen sie einen neuen Datensatz, nehmen sie den Ähnlichsten und klonen ihn.
Ganz bemerkenswert ist, dass nach einem Eintrag via SSMS der entsprechende Datensatz wohl noch mit dem Browser gesichtet werden kann, aber keine Änderungen mehr vorgenommen werden dürfen. Sobald nämlich dieser Datensatz im Browser-Modus abgespeichert wird, erscheinen in den Felder/Spalten mit den HTML-Einträgen Fragezeichen und die HTML-Einträge sind weg.
Für die Umwandlung von Zeichen zu HTML-Kodierung, bzw. Numeric Character Reference (NCR) dezimal, entweder dazu die notwendigen Werte dem folgendem Link durch Umwandlung entnehmen
Unicode_Zeichensaetze
oder wie von ukulele-7 und MadMax beschrieben mit
umwandeln.
Danke für eure Mithilfe
Gruss Berner
Bitte warten ..
Mitglied: ukulele-7
12.04.2021 um 09:56 Uhr
Ja sry bin auch schwer beschäftigt und schreibe grade weniger.

Der Code war nur zur Veranschaulichung in SSMS und schreibt oder ließt erstmal nicht in der Tabelle, das müsste dann per UPDATE oder INSERT gemacht werden. Ich ging davon aus das du ein Front-End / Anwendung hast die die Tabelle mit Daten füttert und dort Probleme mit dem Zeichensatz entstehen. Natürlich kann prinzipiell jeder Client solche Probleme mit sich bringen aber auch ein Webclient müsste theoretisch in der Lage sein damit umzugehen.

Aber du hast es ja hin bekommen :-) face-smile Sollte es eine Randerscheinung bleiben kannst du dir mit cast() AS XML behelfen. Wenn du das öfters brauchst würde sich eventuell ein anderer SQL-Editor besser schlagen.
Bitte warten ..
Heiß diskutierte Inhalte
Off Topic
Realistische Gehaltsvorstellung für eine "IT-Allroundkraft"
gelöst JiggyLeeVor 17 StundenFrageOff Topic17 Kommentare

Hallo an alle, ich hege momentan den Wunsch mich von der alten verstaubten Behörden Bürokratie und langweiliger Aufgaben los zu lösen und in einem ...

Windows 10
Windows 10 Geschwindigkeitprobleme trotz viel mehr Gb Ram
Matthes88Vor 23 StundenFrageWindows 1036 Kommentare

Hallo ihr lieben aaaalso : Da mein neuer Arbeitsspeicher (32gb) von meiner alten Windows 7 version (max mit 8gb kompatibel) nicht angenommen wurde, habe ...

Humor (lol)
Tipp: Dinge, die man besser nicht klaut
altmetallerVor 19 StundenTippHumor (lol)9 Kommentare

Hallo, so wurde meiner Hündin z.B. heute der (eingeschaltete) GPS-Tracker mit Mobilfunkanbindung quasi "direkt vom Halsband weggefunden". Akku hatte noch 60% :-P Und ich ...

Switche und Hubs
Suche Deutsche Sprachdatei für D-Link DGS-1210-24 D1 Switch
gelöst Oggy01Vor 1 TagFrageSwitche und Hubs8 Kommentare

Hallo, ich habe einen D-Link DGS-1210-24 Vers. D1 Switch bekommen und suche für diesen eine Deutsche Sprachdatei. Die Firmware ist auf dem aktuellen Stand ...

Windows Server
GPU Passthrough HYPER-V 2019
bintesVor 1 TagFrageWindows Server8 Kommentare

Hallo, ich habe ein ein Problem mit der Bereitstellung einer Grafikkarte an eine virtuelle Maschine. Hardware: - HPE ProLiant DL380 Gen9 V4 Rack Server ...

Video & Streaming
Videoaufnahme funktioniert nur bis zum ersten Reboot (0x80040217)
IllusionFACTORYVor 1 TagFrageVideo & Streaming11 Kommentare

Ich nehme über eine Video-Software von einem USB-Hardware-Encoder Video auf. Das funktioniert exakt bis zum ersten Reboot - danach bekomme ich beim Starten der ...

Windows Server
Windows Admin Center DC
maximidVor 1 TagFrageWindows Server3 Kommentare

Hallo, ich hätte mal eine Frage zu Windows Admin Center und zwar schaue ich es mir aktuell etwas an da mir die zentrale Verwaltung ...

SAN, NAS, DAS
Synology DS213j - Volume nach HDD Austausch vergrößern
gelöst JasperBeardleyVor 1 TagFrageSAN, NAS, DAS4 Kommentare

Moin, ich hab meinem NAS zwei neue 8TB spendiert, da die 3TB Platten jetzt 6 Jahre alt sind. Da die beiden Platten im JBOD ...