MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Access & Datenbanken > SQL
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 05.07.2018, 11:51   #1
hcscherzer
MOF Guru
MOF Guru
Standard MySQL - Länge Textfeld

Ich habe in einer MySQL Datenbank ein Feld, das als 'text' deklariert ist.
Für eine gewisse Anforderung dürfen jedoch nur 250 Zeichen drinstehen.

Um mir einen Überblick zu verschaffen:
Code:

select length(textfield) from table
where length(textfield)>250;
... sind das 4.312 Datensätze (von 5.816)
Jetzt schneide ich brutalstmöglich ab:
Code:

update table set textfield = left(textfield, 250) 
where length(textfield)>250;
Erstaunlicherweise werden aber von der update Anweisung nur 4.309 Sätze betroffen.

Jetzt rufe ich die erste Prozedur zur Kontrolle nochmal auf, um zu sehen, was mit den drei Sätzen ist, die nicht bearbeitet wurden ... und siehe da: es sind immer noch 2.685 Datensätze, die länger sind. Wenn ich das im Einzelnen überprüfe ist das auch tatsächlich so. Allerdings ist der längste "nur noch" 256 lang.

Und wenn ich jetzt die update Anweisung nochmal ausführen lasse, sind 0 Datensätze betroffen.

Was ist da los?

__________________

Freundlichen Gruß
Hans-Christian
-----------------------------------------
Oft erwünscht, selten beachtet: nach Erledigung des Problems den Thread als erledigt zu markieren
-----------------------------------------
Ich möchte nur Mitglied in einem Verein sein, der Leute wie mich nicht als Mitglied aufnimmt (Groucho Marx).
-----------------------------------------
Ab sofort regelmässig: MOF Stammtisch in Bremen. Näheres hier.
hcscherzer ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 05.07.2018, 15:09   #2
sonic8
MOF Koryphäe
MOF Koryphäe
Standard

Zitat: von hcscherzer Beitrag anzeigen

Jetzt schneide ich brutalstmöglich ab:

Code:

update table set textfield = left(textfield, 250) 
where length(textfield)>250;

Die beiden Funktionen passen nicht zusammen. LEFT(XY,250) liefert dir 250 Characters, LENGTH(XY) > 250 liefert dir alles was länger als länger 250 Bytes ist.
Verwende statt LENGTH besser CHAR_LENGTH

Damit lässt sich aber nicht so recht erklären, wie die 3 Datensätze Differenz zwischen dem Ergebnis der ersten und den records affected der zweiten Anweisung zustandekommen.

__________________

Office / Access 2019: Rückkehr der Symbolleiste?
sonic8 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 05.07.2018, 17:13   #3
hcscherzer
Threadstarter Threadstarter
MOF Guru
MOF Guru
Standard

Danke für den Hinweis auf den Unterschied zwischen length() und left(), der war mir nicht bewusst.

Was ich allerdings herausgefunden habe, durch die Analyse der Feldinhalte, wo length mit mehr als 250 übrig bleibt nach dem Update-Befehl:
es sind die deutschen Umlaute, die mit je zwei Byte gespeichert sind.
left() zählt - wie char_length() auch - tatsächlich die Zeichen.
length() zählt die Bytes.

Wieder was gelernt, danke.

__________________

Freundlichen Gruß
Hans-Christian
-----------------------------------------
Oft erwünscht, selten beachtet: nach Erledigung des Problems den Thread als erledigt zu markieren
-----------------------------------------
Ich möchte nur Mitglied in einem Verein sein, der Leute wie mich nicht als Mitglied aufnimmt (Groucho Marx).
-----------------------------------------
Ab sofort regelmässig: MOF Stammtisch in Bremen. Näheres hier.
hcscherzer ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 07.07.2018, 11:32   #4
fraeser
MOF Meister
MOF Meister
Standard

Ja,
LENGTH() ist etwas irreführend.

In MS SQL gibt es LEN() > zählt die Zeichen
und DATALENGTH() > Anzahl der Bytes.

__________________

Gruß, Jan

Zitat:

Programmieren und Microsoftail: "Gestern stand ich noch am Abgrund.....heute bin ich einen Schritt weiter....!"

fraeser ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:25 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.