функция LENGTH

iceman

говнокодер
функция LENGTH

PHP:
SELECT LENGTH(text) as L, text FROM table
mysql функция LENGTH возвращает 25000

а PHP функция strlen($row['text']) возвращает 15000

почему так?
и как сделать чтобы функция выдавала тот же результат что и strlen();

-~{}~ 19.08.08 10:20:

таблицы в UTF-8
 

Gas

может по одной?
покажи show create table и значение настройки mbstring.func_overload в php
 

iceman

говнокодер
mbstring.func_overload = 0

strlen показывает правельный результат...

в поле text ввел "ццц", strlen показала 3, а LENGHT - 6

для цифр, и английских букв оба варианта верны, а для русских слов - LEGTH показывает больше чем на самом деле

PHP:
CREATE TABLE `content` ( 
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`fk_content_catalog` int(10) unsigned NOT NULL, 
`title` varchar(255) NOT NULL, 
`text` text NOT NULL, 
`add_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
`keywords` text, 

PRIMARY KEY (`id`), KEY `FK_leonidsmirnov_modules_content_1` (`fk_content_catalog`),
CONSTRAINT `FK_leonidsmirnov_modules_content_1` FOREIGN KEY (`fk_content_catalog`) \
REFERENCES `leonidsmirnov_modules_content_catalog` (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
в начале скрипта идет запрос SET NAMES cp1251;
mysql 5.1.22
 

Gas

может по одной?
в поле text ввел "ццц", strlen показала 3, а LENGHT - 6
LENGHT то как раз правильное значение вернуло, если нужно количество символов, используй CHAR_LENGTH().
А вот strlen должен был сказать 6, всё таки или mb_overloading стоит или ещё какая-то уличная магия, так быть не должно. Лучше используй mb_strlen, чтоб не было проблем при смене хостинга.

-~{}~ 19.08.08 09:45:

в начале скрипта идет запрос SET NAMES cp1251;
жесть, а зачем кодировка таблицы utf8 тогда?

p.s. теперь понятно почему strlen даёт 3, раз у тебя однобайтовая кодировка используется, можешь mb_strlen не юзать.
 

iceman

говнокодер
жесть, а зачем кодировка таблицы utf8 тогда?
чтобы не мучатся, когда переносишь таблицы с хостинга на хостинг

LENGHT то как раз правильное значение вернуло, если нужно количество символов, используй CHAR_LENGTH().
А вот strlen должен был сказать 6, всё таки или mb_overloading стоит или ещё какая-то уличная магия, так быть не должно. Лучше используй mb_strlen, чтоб не было проблем при смене хостинга.
strlen почему это? длина сроки 3 символа, должен возвратить 3 символа...

CHAR_LENGTH() за это спасибо...
 

флоппик

promotor fidei
Команда форума
Партнер клуба
жесть, а зачем кодировка таблицы utf8 тогда?
что бы хранить в UTF-8, естественно.

strlen почему это? длина сроки 3 символа, должен возвратить 3 символа...
3 байта. 3 символа, но в UTF-8 кодировке, при наличие символов с кодом >127 = числу байт будет больше числа символов.
 
Сверху