Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Длина поля в MySQL 
:(
    Опции темы
mark2009
Дата 10.10.2012, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 106
Регистрация: 12.10.2009

Репутация: нет
Всего: 1



Люди, помогите разобраться....

Есть таблица. В ней есть поле:

Код

user_login varchar(30) character set utf8 not null


В php есть следующий код:
Код

mysql_connect('dbServer', 'dbUser', 'dbPassword');
mysql_select_db('dName');

$q = mysql_query('SELECT user_login FROM users');
$r = mysql_field_len($q, 0);

echo $r;


данный код в наглую мне выводит 90.

Проверил на другом поле у которого varchar(100) - мне вывелось 300.

Подскажите, как работает этот механизм? До сего момента я был уверен, что длина поля определяется числом varchar... указал varchar(10) будет 10...

Кто из нас сейчас глючит?

Добавлено @ 16:09
Думал, что это связано с кодировкой. Но сейчас изменил кодировку поля на cp_1251 а неверный вывод остался.

Также изменил с varchar(30) на char(30). Всё равно выводит то же самое.

Можно это признать багом php?

Версия php 5.4.6 под Windows.

Добавлено через 6 минут и 44 секунды
Продолжаю изыскания smile
Исследуемое поле user_login является индексом.
Протестировал на другом поле - всё равно выводится значение в 3 раза превышающее должное значение.

Это сообщение отредактировал(а) mark2009 - 10.10.2012, 16:10
PM MAIL WWW ICQ Skype   Вверх
Akina
Дата 10.10.2012, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



UTF-8 для кодирования одного символа использует от 1 до 3 байтов. Соответственно место резервируется так, чтобы любая строка заданной длины в символах поместилась в поле и не занимало байты у соседа.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
mark2009
Дата 10.10.2012, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 106
Регистрация: 12.10.2009

Репутация: нет
Всего: 1



Я же объясняю, что уже была поменена кодировка. Или вы хотите сказать, что mysql резервирует символы и потом хоть меняй хоть не меняй кодировку, всё равно то же самое будет?
PM MAIL WWW ICQ Skype   Вверх
Akina
Дата 10.10.2012, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(mark2009 @  10.10.2012,  19:11 Найти цитируемый пост)
Я же объясняю, что уже была поменена кодировка. 

Я сомневаюсь, что это было сделано правильно. И что таблица была реально изменена.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 10.10.2012, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(Akina @  10.10.2012,  17:57 Найти цитируемый пост)
UTF-8 для кодирования одного символа использует от 1 до 3 байтов.

Я слышал что в военное врермя может достигать и шести байт  smile 


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0627 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.