|
|
|
| подскажите пож какой строковый тип данных нужно подбирать например для хранения логина и пароля, и вообще когда установить тип text то в таблице заранине выделяеться пямять типа как char когда заполняем ее?? | |
|
|
|
|
|
|
|
для: Богданн
(09.07.2011 в 16:12)
| | обычно VARCHAR используют... зачем Вам CHAR? | |
|
|
|
|
|
|
|
для: Valick
(09.07.2011 в 16:18)
| | просто интересно, если установить тип чар, то выделиться конкретынй участок памяти и он будет неизменим в зависимости от длинны строки, варчар наоборот гибкий, а что будет если присвоить тип TEXT там тоже присваиваеться участок памяти или оно как варчар уменшаеть обьем? | |
|
|
|
|
|
|
|
для: Богданн
(09.07.2011 в 16:22)
| | На самом деле там еще все интереснее, CHAR работает только если все строковые столбцы таблицы имеют этот тип, если хотя бы один - переменный, он заменяется на VARCHAR. Дело в том, что при фиксированных размерах строк, вы можете их быстрее обрабатывать, так как заранее знаете размер каждой записи (кстати, похожая техника используется при построении бинарного кода, где выравниваются адреса, чтобы процессор мог их быстрее обрабатывать). Понятно, что если у вас есть хотя бы одна переменная строка - вычислить точный размер записи невозможно и нет смысла хранить в таблице избыточную пустую информацию в CHAR-строках. | |
|
|
|
|
|
|
|
для: Богданн
(09.07.2011 в 16:12)
| | Обычно небольшой VARCHAR или TINYTEXT, логин и пароль редко бывают больше 100 символов.
>и вообще когда установить тип text то в таблице заранине выделяеться пямять типа как char
>когда заполняем ее??
Нет, это динамический тип, в нем память выделяется только для адресации, конкретно для TEXT - два байта, т.е. если строка у вас занимает 14 байт, то в базе она будет занимать 16 байт (понятно, что реальный размер будет определяться количеством столбцов). 2 байта при 1000000 записей выливаются в 2Мб. | |
|
|
|
|
|
|
|
для: cheops
(09.07.2011 в 16:25)
| | ясно, тоесть присвоение типов text для ника и пароля приведут к избытку информации? | |
|
|
|
|
|
|
|
для: Богданн
(09.07.2011 в 16:30)
| | не информации (её как раз всегда мало скок не дай), а места под эту информацию на диске | |
|
|
|
|
|
|
|
для: Valick
(09.07.2011 в 16:33)
| | понял, спасибо. | |
|
|
|
|
|
|
|
для: Богданн
(09.07.2011 в 16:30)
| | Не то чтобы очень, но если вы воспользуетесь TINYTEXT, то сэкономите один байт на каждую запись... если выберете CHAR, то у вас будет храниться куча пустого места (правда, если в таблице будет хотя бы одна переменная строка, он превратиться в VARCHAR, который эквивалентен по размеру TEXT). | |
|
|
|
|
|
|
|
для: cheops
(09.07.2011 в 16:36)
| | спасибо | |
|
|
|
|
|
|
|
для: cheops
(09.07.2011 в 16:36)
| | и еще вопросик, скажите пож один символ в ASCII занимает один байт тоесть 256бит, а если поставить UNICOD кодировку для таблици или базы к примеру то, каждый символ будет занимать уже 2бита?? соотвецтвенно обьем увеличиться? | |
|
|
|
|
|
|
|
для: Богданн
(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Мб и соответственно обрабатываться медленнее. | |
|
|
|
|
|
|
|
для: cheops
(09.07.2011 в 16:25)
| | а в char и varchar этих 2ох байтов нет, но и нельзя вставлять символов больше чем 255..кстати пробел же тож идеть как один бит в windows-1251? | |
|
|
|
|
|
|
|
для: Богданн
(09.07.2011 в 18:25)
| | В CHAR нет, в VARCHAR есть (вернее 1 байт если вы указываете длину до 255 и 2 байта - если указывайте большее значение, максимальное - 65535). Эти один и два байта используются для хранения количества символов, чтобы СУБД "знала", где искать конец этой строки - иначе такие строки с переменной длиной просто не смогут существовать.
>кстати пробел же тож идеть как один бит в windows-1251?
Да, он занимает 1 байт, как и любой другой символ в кодировке Windows-1251. Это принципиально однобайтовая кодировка - в ней один символ занимает один байт. | |
|
|
|
|
|
|
|
для: cheops
(09.07.2011 в 18:37)
| | спасибо | |
|
|
|