Таблица странных сессий CodeIgniter - PullRequest
0 голосов
/ 14 февраля 2011
CREATE TABLE IF NOT EXISTS  `ci_sessions` (
session_id varchar(40) DEFAULT '0' NOT NULL,
ip_address varchar(16) DEFAULT '0' NOT NULL,
user_agent varchar(50) NOT NULL,
last_activity int(10) unsigned DEFAULT 0 NOT NULL,
user_data text DEFAULT '' NOT NULL,
PRIMARY KEY (session_id)
);

Теперь у меня есть несколько вопросов:

  1. Каждый идентификатор сеанса имеет длину 32 символа, но в таблице есть varchar (40). Почему varchar (40), а не char (32)?

  2. ip_address, такой как 182.111.112.113, имеет длину 15 символов, но в таблице есть varchar (16). Почему varchar (16), а не varchar (15)?

  3. Каждый user_agent имеет длину 50 символов, но в таблице есть varchar (50). Почему varchar (50), а не char (50)?

Может кто-нибудь ответить мне на эти вопросы? Пожалуйста!

ПРИМЕЧАНИЕ. Мой механизм хранения по умолчанию - InnoDB.

Ответы [ 3 ]

1 голос
/ 16 февраля 2011

Вам не нужно беспокоиться об этом вообще.Просмотрите документацию MySQL для типов данных:

http://dev.mysql.com/doc/refman/5.0/en/char.html

Чтобы подвести итог, varchar расширяется до того, что необходимо, до указанного предела .Так что, если вы используете только 50 символов, тогда в базе данных будет только 50 символов, а не 60. Так что, вероятно, просто разработчик хочет получить четные четные числа.

0 голосов
/ 18 ноября 2013
  1. вы можете изменить его на varchar (32)

  2. для IPV6

  3. user_agent - это переменная, поэтому измените ее на varchar (255)

0 голосов
/ 16 февраля 2011
  1. Вероятно, они решили использовать 40 символов вместо 32, просто чтобы покрыть свои спины на случай, если в будущем некоторые стандарты изменятся или они изменят способ кодирования id_session. Varchar вместо char ... Ну, в конце char добавляет пробелы (это тип с фиксированной длиной, http://dev.mysql.com/doc/refman/5.0/en/char.html), чтобы точно соответствовать 40 байтам. Когда вы получаете его, он возвращается к 32 байтам, но я полагаю они используют Varchar для экономии места для хранения.

  2. Понятия не имею. Извините!

  3. Может быть, использовать varchar в качестве стандарта? Я не знаю, но в моем случае я склонен методично использовать varchar вместо char.

Имейте в виду, что все мои ответы - просто предположения, и я не совсем уверен в них (особенно во втором xD).

С наилучшими пожеланиями

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...