2016-07-19 4 views
0

ich die folgende Anweisung ausführen:mysql Teilzeichenfolge/links Befehl ist nicht korrekte Anzahl der Zeichen der Rückkehr

select left(column,400) from table into outfile test; 

Ich habe auch versucht String-Funktion (mit gleichen Ergebnissen).

Wenn ich die Datei herunterzuladen und eine Zeichenzahl zu erhalten:

wc -c < test 

ich 409 Zeichen als eine Rückkehr.

Komm jemand mir helfen, warum ich eine falsche Anzahl bekomme?

Die Datenbanktabelle ist auf utf8 eingestellt und die Spalte ist longtext.

Wenn ich ausführen, um die es noch folgende gibt mir nicht korrekte Länge der Zeichen:

select length(left(column, 400) from table where id in (1,2,3,4); 
+-----------------------------+ 
| length(left(column,400)) | 
+-----------------------------+ 
|       402 | 
|       403 | 
|       412 | 
|       401 | 
+-----------------------------+ 

Antwort

1

Der Befehl wc -c zählt Bytes trotz der Zeichen für den Schalter verwendet. Mit der DB in UTF-8 zählt die Mysql leftZeichen. Da UTF-8 mehr als 1 Byte pro Zeichen verwenden kann, erwarte ich, dass die ersten 400 Zeichen in column 8 Zeichen enthalten, die 2 Byte benötigen (oder weniger als 8, wenn einige 3 Byte benötigen). Es gibt wahrscheinlich auch eine neue Zeile am Ende.

+0

Gibt es eine mysql-Funktion, die funktioniert, wie ich brauche? nur die angegebene Anzahl von Zeichen zu greifen? – user3299633

+0

Sie haben nicht verstanden, was ich gesagt habe, 'left' nimmt die angegebene Anzahl von ** Zeichen **! Es ist nur, dass Sie das mit 'wc -c' getestet haben, das ** Zeichen ** ** nicht zählt! – MAP

+0

Ich habe meinen ursprünglichen Beitrag aktualisiert, um zu zeigen, dass die Datenbank immer noch nicht die korrekte Anzahl von Zeichen zurückgibt. – user3299633

Verwandte Themen