Topic: char_length neatitikimas

Trys simboliai 'abc', char_length teisingai nurodo, jog išties trys.

set @s = convert('abc' using utf8);
select length(@s), char_length(@s);

+------------+-----------------+
| length(@s) | char_length(@s) |
+------------+-----------------+
|          3 |               3 |
+------------+-----------------+

Jei vietoje 'abc' naudoju 'abč', rodo, jog keturi simboliai, nors, manau, turėtų rodyti 3.

set @s = convert('abč' using utf8);
select length(@s), char_length(@s);

+------------+-----------------+
| length(@s) | char_length(@s) |
+------------+-----------------+
|          6 |               4 |
+------------+-----------------+

Gal žinote kodėl?

2 (edited by Ajaks 2012-03-05 13:40:34)

Re: char_length neatitikimas

nes lietuviska č kompas sukuria is dvieju simboliu

http://www.mysql.lt/forumas/viewtopic.php?id=2008

Re: char_length neatitikimas

Man viskas veikia tvarkingai.

Re: char_length neatitikimas

O ką rodo tokia užklausa:

SHOW VARIABLES LIKE '%character%'

Re: char_length neatitikimas

minde wrote:

O ką rodo tokia užklausa:

SHOW VARIABLES LIKE '%character%'

Rodė, jog:

character_set_client=latin1

Kada pakeičiau į utf8, 'abč' buvo matomas kaip trijų simbolių rinkinys:

set character_set_client=utf8;
select char_length(convert('abč' using utf8)) as žodis;
+--------+
| žodis  |
+--------+
|      3 |
+--------+

Kaip suprantu, jei mysql klientas 'string' saugo kaip latin1, mano nurodymas, jog atskirą 'string' saugotų kaip utf8 neveikia. č raidė saugoma kaip du simboliai, nes latin1 koduotė neturi č raidės.

Dėkui už pagalbą.