Varcar (200) в mySql не соответствует атрибуту maxLength = 200 текстового поля html

Я использую базу данных MySql и в качестве поля выбрал varchar (200). Чтобы предотвратить проблемы, я установил на моей html-странице максимальную длину 200. Так что в идеале проблем быть не должно. Но если я позволю пользователю ввести 200 символов, я получу исключение. Итак, я пробовал и пробовал, и только при 190 символах я могу быть уверен, что он также подходит для базы данных. Поэтому в будущем, чтобы предотвратить проблемы, я всегда буду делать размер varchar () на 20% больше, чем то, что пользователь может ввести на html-странице.


person Steffi17    schedule 07.11.2019    source источник


Ответы (2)


Если говорить о максимальной длине, то каждый carriage returns считается двумя символами. Можете ли вы убедиться, что у вас есть возврат каретки.

1\r\n
1\r\n
1\r\n
1

введите здесь описание изображения

person Vignesh Kumar A    schedule 07.11.2019
comment
textarea maxlength уже подсчитывает возврат каретки. Предположим, у вас есть maxlength = 10 и вы вводите 5 символов после каждого нажатия клавиши ввода, это минимальная максимальная длина, которую позволяет, потому что у вас уже есть 10 символов. Так что теперь для меня еще более странно, почему mqsql дает мне исключение - person Steffi17; 07.11.2019

varchar(200) должен иметь возможность хранить 200 символов. Вам не нужно увеличивать размер, но если вы это сделаете, произвольное увеличение на 10% не гарантирует решения проблемы, если вы не знаете, что ее вызывает. Сохранится опасность переполнения.

Некоторые возможные причины, которые приходят на ум:

  • Как отметил @VigneshKumarA, это может быть возврат каретки, сохраненный как два символа.
  • Это также могут быть многобайтовые символы Юникода, то есть все, что угодно, кроме базового набора символов ASCII. Если вы вводите буквы или символы с диакритическими знаками или нелатинские шрифты, они занимают более одного байта на символ.
  • Экранированные / закодированные символы, если вы дезинфицируете свои данные. Например, если вы используете htmlentities() или аналогичный для входной строки, вы можете получать отдельные символы из входных данных, которые преобразуются в коды сущностей, такие как &. Это, очевидно, сделает строку длиннее, чем была при вводе.

Я бы порекомендовал вам использовать инструмент базы данных для изучения сохраненных данных и проверки, почему он хранит больше символов, чем вы ожидали. Поймите, чем вызвано несоответствие, а затем либо исправьте его, либо адаптируйте свою систему, чтобы справиться с ним, чтобы вы могли быть уверены, что оно никогда не переполнится.

person Spudley    schedule 07.11.2019
comment
поэтому я просто ввел 200 А. Поэтому, когда я напрямую перехожу к базе данных mysql, не возникает проблем с вводом 200 А. Также без проблем ввести 200 А в окне моего браузера. Но кажется, когда мой сервер отправляет его в базу данных, возможно, на данный момент он превышает 200 символов. Я использую jdbc и ORM - person Steffi17; 07.11.2019
comment
похоже что-то есть в коде сервера. Так что я это проверю. Спасибо за вашу помощь @all - person Steffi17; 07.11.2019