Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: строковый типа данных в mysql
 
 автор: Богданн   (09.07.2011 в 16:12)   письмо автору
 
 

подскажите пож какой строковый тип данных нужно подбирать например для хранения логина и пароля, и вообще когда установить тип text то в таблице заранине выделяеться пямять типа как char когда заполняем ее??

  Ответить  
 
 автор: Valick   (09.07.2011 в 16:18)   письмо автору
 
   для: Богданн   (09.07.2011 в 16:12)
 

обычно VARCHAR используют... зачем Вам CHAR?

  Ответить  
 
 автор: Богданн   (09.07.2011 в 16:22)   письмо автору
 
   для: Valick   (09.07.2011 в 16:18)
 

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

  Ответить  
 
 автор: cheops   (09.07.2011 в 16:33)   письмо автору
 
   для: Богданн   (09.07.2011 в 16:22)
 

На самом деле там еще все интереснее, CHAR работает только если все строковые столбцы таблицы имеют этот тип, если хотя бы один - переменный, он заменяется на VARCHAR. Дело в том, что при фиксированных размерах строк, вы можете их быстрее обрабатывать, так как заранее знаете размер каждой записи (кстати, похожая техника используется при построении бинарного кода, где выравниваются адреса, чтобы процессор мог их быстрее обрабатывать). Понятно, что если у вас есть хотя бы одна переменная строка - вычислить точный размер записи невозможно и нет смысла хранить в таблице избыточную пустую информацию в CHAR-строках.

  Ответить  
 
 автор: cheops   (09.07.2011 в 16:25)   письмо автору
 
   для: Богданн   (09.07.2011 в 16:12)
 

Обычно небольшой VARCHAR или TINYTEXT, логин и пароль редко бывают больше 100 символов.

>и вообще когда установить тип text то в таблице заранине выделяеться пямять типа как char
>когда заполняем ее??
Нет, это динамический тип, в нем память выделяется только для адресации, конкретно для TEXT - два байта, т.е. если строка у вас занимает 14 байт, то в базе она будет занимать 16 байт (понятно, что реальный размер будет определяться количеством столбцов). 2 байта при 1000000 записей выливаются в 2Мб.

  Ответить  
 
 автор: Богданн   (09.07.2011 в 16:30)   письмо автору
 
   для: cheops   (09.07.2011 в 16:25)
 

ясно, тоесть присвоение типов text для ника и пароля приведут к избытку информации?

  Ответить  
 
 автор: Valick   (09.07.2011 в 16:33)   письмо автору
 
   для: Богданн   (09.07.2011 в 16:30)
 

не информации (её как раз всегда мало скок не дай), а места под эту информацию на диске

  Ответить  
 
 автор: Богданн   (09.07.2011 в 16:34)   письмо автору
 
   для: Valick   (09.07.2011 в 16:33)
 

понял, спасибо.

  Ответить  
 
 автор: cheops   (09.07.2011 в 16:36)   письмо автору
 
   для: Богданн   (09.07.2011 в 16:30)
 

Не то чтобы очень, но если вы воспользуетесь TINYTEXT, то сэкономите один байт на каждую запись... если выберете CHAR, то у вас будет храниться куча пустого места (правда, если в таблице будет хотя бы одна переменная строка, он превратиться в VARCHAR, который эквивалентен по размеру TEXT).

  Ответить  
 
 автор: Богданн   (09.07.2011 в 16:39)   письмо автору
 
   для: cheops   (09.07.2011 в 16:36)
 

спасибо

  Ответить  
 
 автор: Богданн   (09.07.2011 в 16:58)   письмо автору
 
   для: cheops   (09.07.2011 в 16:36)
 

и еще вопросик, скажите пож один символ в ASCII занимает один байт тоесть 256бит, а если поставить UNICOD кодировку для таблици или базы к примеру то, каждый символ будет занимать уже 2бита?? соотвецтвенно обьем увеличиться?

  Ответить  
 
 автор: cheops   (09.07.2011 в 17:08)   письмо автору
 
   для: Богданн   (09.07.2011 в 16:58)
 

Да, примерно так дело и обстоит. Тут вот какая ситуация, 10 лет назад был введен UNICODE - два байта на символ. Потом выяснилось, что использовать его в Интернет - не реально, так как некоторые последовательности нельзя использовать - они управляющие (UNICODE сейчас помоему только в Windows применяется, особенно интенсивно при кодировании, если будете разрабатывать Windows-программы, мимо этой кодировки не пройдете :). Поэтому ввели другую кодировку UTF-8, причем она уже содержит от 1 до 4 байт на символ. Например, английский текст полностью совпадает с ASCII (т.е. один байт на символ), а русский уже требует 2 байта. Поэтому да, русский текст в UTF-8 занимает в два раза больше места, чем скажем в Windows-1251. Т.е. если база этого форума в Windows-1251 что-то около 200Мб, то в UTF-8 она будет 400Мб и соответственно обрабатываться медленнее.

  Ответить  
 
 автор: Богданн   (09.07.2011 в 18:25)   письмо автору
 
   для: cheops   (09.07.2011 в 16:25)
 

а в char и varchar этих 2ох байтов нет, но и нельзя вставлять символов больше чем 255..кстати пробел же тож идеть как один бит в windows-1251?

  Ответить  
 
 автор: cheops   (09.07.2011 в 18:37)   письмо автору
 
   для: Богданн   (09.07.2011 в 18:25)
 

В CHAR нет, в VARCHAR есть (вернее 1 байт если вы указываете длину до 255 и 2 байта - если указывайте большее значение, максимальное - 65535). Эти один и два байта используются для хранения количества символов, чтобы СУБД "знала", где искать конец этой строки - иначе такие строки с переменной длиной просто не смогут существовать.

>кстати пробел же тож идеть как один бит в windows-1251?
Да, он занимает 1 байт, как и любой другой символ в кодировке Windows-1251. Это принципиально однобайтовая кодировка - в ней один символ занимает один байт.

  Ответить  
 
 автор: Богданн   (09.07.2011 в 19:38)   письмо автору
 
   для: cheops   (09.07.2011 в 18:37)
 

спасибо

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования