Непонятки с VARCHAR и CHAR

kvf77

Red Devil
Непонятки с VARCHAR и CHAR

В доке написано, что тип CHAR может включать в себя до 255 символов, однко при создании таблицы CREATE TABLE xxx user_name CHAR(11) в результате получаю поле типа VARCHAR(11). Почему происходит такая фигня? Я не понимаю. В результате у меня не получается создавать в таблице поля фиксированной длинны, а только VARCHAR. CHAR срабатывает только если я создаю поле в 1 символ - CHAR(1).
 

tony2001

TeaM PHPClub
Если некоторый столбец в таблице имеет переменную длину, то и вся строка в результате будет переменной длины. Следовательно, если таблица содержит любые столбцы переменной длины (VARCHAR, TEXT или BLOB), то все столбцы CHAR с длиной, превышающей три символа, преобразуются в столбцы VARCHAR. Это в любом случае не влияет на использование столбцов; в MySQL столбец VARCHAR представляет собой просто иной способ хранения символов. MySQL выполняет данное преобразование, поскольку оно позволяет сэкономить память и сделать табличные операции более быстрыми.
(c) http://www.mysql.com/doc/ru/Silent_column_changes.html
 

jeka!

Просто Member
У меня тоже была такая трабла, если собираешься хранить маленькие строки, ну типа урл адреса, или емайл. То можно перевести символы в цифры, например ascii. и записать их в столбец типа bigint или double. На больших строках это не прокатит...
Вернее я писал свою функцию для перевода, так например все буквы латиницы, точка, дефиз и собака, имели свои номера.

Например:
a=>01
b=>02
@=>03
и т.д.

И перевод перед преобразованием в нижный регистр.
 
Сверху