Я определил столбец в моей базе данных mysql как:
ALTER TABLE `my_table` CHANGE `desc` `desc` VARCHAR( 255 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL
Но когда я ввожу текст из моего интерфейса, чтобы вставить его в таблицу, после того, как размер данных столбца достигнет 233, он усекает дополнительный текст, т.е. текст за пределами 233 символов не сохраняется !!
Я попытался изменить размер столбца на VARCHAR (511), но не добился успеха.
Я подсчитал nos символов, используя php strlen()
и он обнаружил 233 символа
Почему MySQL это делает, и как я могу сохранить текст?
A VARCHAR(250)
NOT NULL берет один байт, чтобы сохранить длину n и n байтов, чтобы сохранить фактическую строку. Таким образом, столбец, содержащий значение «abc», будет содержать 4 байта. В VARCHAR(250)
NULL значение nullity принимает один бит, а значение NULL больше не принимает ничего. Непустое значение принимает этот бит, один байт для длины и n байтов для данных. Здесь нужно немного означать, что несколько столбцов с нулевым значением имеют один или несколько байтов для записи их недействительности.
Другие типы данных переменной длины аналогичны. Типы BLOB и TEXT различных размеров могут иметь длину более одного байта, но в остальном они работают практически одинаково. Числовые типы, а также типы фиксированной длины CHAR имеют фиксированные требования к памяти. Я думаю, что CHAR будет опускать байт длины, так как его содержимое заполняется пробелами до этой фиксированной длины.
Индексы могут увеличить требования к памяти. Многобайтовые наборы символов (включая UTF-8
) могут увеличить требования к памяти, поэтому приведенные выше утверждения будут выполняться только в том случае, если ваша таблица была создана для latin1 или аналогичной. Таким образом, вы можете сделать вывод, что VARCHAR(250)
не означает 255 символов, это будет зависеть от того, как вы кодируете свои строки
Используйте mb_strlen()
для подсчета количества символов, она многобайтовая, кажется, что у вас есть специальные символы в вашей строке, см. Здесь .
Это зависит от версии сервера MySQL и настроек, но если какая-то строка превышает предопределенную длину во время вставки или обновления, то MySQL автоматически обрезает превышенную часть.