Intereting Posts
Вопросы API EmberJS с использованием PHP PHP-разбиение на страницы с использованием glob для извлечения изображений Тестирование в PHP Лучшая практика, переопределяющая __construct () по сравнению с предоставлением метода init () Получить переменные извне, внутри функции в PHP добавить css 3 фильтра изображений в php Вложение электронной почты Codeigniter 3 из формы Как мы можем отправлять сообщения GCM в большом количестве 1000 в базу данных, скажем, из 10 000 зарегистрированных пользователей? Как загрузить баланс php-приложения? Larvel 4.2 artisan CLI больше не работает после обновления композитора Есть ли способ ограничить количество представлений для php-формы? Уничтожить сеансы PHP на вкладке «Браузеры» Закрыть Magento – переопределение модели не работает в local codePool при использовании функции «эхо» в функции, почему результат появляется в предыдущей строке? Как использовать Elastic Search поверх ранее существующей базы данных SQL?

Ограничение MySQL varchar (255) & Аномалия

Я определил столбец в моей базе данных 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 автоматически обрезает превышенную часть.