LEFT und Sonderzeichen

LEFT und Sonderzeichen

am 31.01.2006 14:14:17 von Matthias Sauer

Hallo NG,

ich stelle in einer Anwendung lange Namen als gekürzten String dar und
verwende dafür

SELECT
title,
IF (LENGTH(title) > 18 , CONCAT(LEFT(title,18),'...'), title) as shorttitle,
....

Das klappt auch wunderbar, jedoch gibt es bei bestimmten Zeichen das
Problem,
daß am Ende nur ... als shorttitle herauskommt.

Konkretes Beispiel:

aus "¿Porqué la gestión de residuos?" wird "..."

aus "Separación de residuos" wird "Separación de res..."

Die Zeichen werden per PHP als utf8 in die Datenbank geschrieben.
Theoretisch könnte ich auch mit Scriptsprache die Kürzung vornehmen,
wollte mir diesen Performace-Verlust jedoch ersparen.

Kennt jemand das Problem und vielleicht auch eine Lösung? Ich bin für
jeden Tip dankbar.

--
Gruß
Matthias

Re: LEFT und Sonderzeichen - Korrektur

am 02.02.2006 10:32:18 von Matthias Sauer

Matthias Sauer schrieb:
> Konkretes Beispiel:
>
> aus "¿Porqué la gestión de residuos?" wird "..."
>
> aus "Separación de residuos" wird "Separación de res..."

Leider ist mir ein Fehler unterlaufen: Das Problem tritt nicht mit dem
hier gezeigten spanischen Text auf sondern bspw. in Polnisch


Aus "Segregacja odpadów" wird "Segregacja odpad�..."

Vielen Dank.

--
Gruß
Matthias

Re: LEFT und Sonderzeichen - Korrektur

am 02.02.2006 11:31:56 von Christian Kirsch

Matthias Sauer schrieb:
> Matthias Sauer schrieb:
>> Konkretes Beispiel:
>>
>> aus "¿Porqué la gestión de residuos?" wird "..."
>>
>> aus "Separación de residuos" wird "Separación de res..."
>
> Leider ist mir ein Fehler unterlaufen: Das Problem tritt nicht mit dem
> hier gezeigten spanischen Text auf sondern bspw. in Polnisch
>
>
> Aus "Segregacja odpadów" wird "Segregacja odpad�..."
>

Damit man das überhaupt nachvollziehen kann:
- SHOW CREATE TABLE
- Statements in mysql im Terminal ausprobieren (NICHT mit PHP und Browser)
- Informationen über Server-, Client-, Connection-Characterset
(Handbuch, Kapitel 11, iirc).

In Deiner Mail zumindest tauchen im zweiten polnischen Text illegale
UTF-8-Zeichen auf:

Aus "Segregacja odpadów" wird "Segregacja odpad�..."

Die Darstellung von ó ist sowohl für die spanische als auch für die
erste polnische Variante identisch und richtig. Insofern glaube ich
nicht, dass hier irgendein Problem mit der LEFT()-Funktion von MySQL
vorliegt (das könntest Du ja auch leicht durch ein LEFT(title,18)
ausprobieren - und zwar wieder in mysql, nicht in PHP).

Re: LEFT und Sonderzeichen - Korrektur

am 02.02.2006 16:30:45 von Matthias Sauer

Christian Kirsch schrieb:

> Damit man das überhaupt nachvollziehen kann:
> - SHOW CREATE TABLE

CREATE TABLE `mt_pages` (
`id` int(11) NOT NULL auto_increment,
`p_id` int(11) NOT NULL default '0',
`title` varchar(255) NOT NULL,
`pstatus` tinyint(4) NOT NULL default '0',
`lang` varchar(10) NOT NULL default 'de',
UNIQUE KEY `uid` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0 COMMENT='Seitenbaum'


> - Statements in mysql im Terminal ausprobieren (NICHT mit PHP und Browser)

Die Zeichen, die die Konsole ausgibt kann ich nicht mal schreiben. Es
sieht aber nicht wie im Webbrowser aus, also ist es denke ich eine
Konsolenproblem.

> - Informationen über Server-, Client-, Connection-Characterset

Server bei einem Webhoster (Strato, Linux):
MySQL 4.0.15
Ich habe aber gerade gesehen, dass in den Variablen nur die folgenden
character_sets angeboten sind:
latin1 big5 czech euc_kr gb2312 gbk latin1_de sjis tis620 ujis dec8 dos
german1 hp8 koi8_ru latin2 swe7 usa7 cp1251 danish hebrew win1251
estonia hungarian koi8_ukr win1251ukr greek win1250 croat cp1257 latin5

Ich denke also, dass es daran liegt.

Trotzdem Vielen Dank für die Hinweise.

> (Handbuch, Kapitel 11, iirc).

Danke.

> Die Darstellung von ó ist sowohl für die spanische als auch für die
> erste polnische Variante identisch und richtig. Insofern glaube ich
> nicht, dass hier irgendein Problem mit der LEFT()-Funktion von MySQL
> vorliegt (das könntest Du ja auch leicht durch ein LEFT(title,18)
> ausprobieren - und zwar wieder in mysql, nicht in PHP).

Liegt wohl daran, dass sich das erste polnische und das spanische ó
nicht genau an Position 17 befindet.


--
Gruß
Matthias