Я использую базу данных MySql и в качестве поля выбрал varchar (200). Чтобы предотвратить проблемы, я установил на моей html-странице максимальную длину 200. Так что в идеале проблем быть не должно. Но если я позволю пользователю ввести 200 символов, я получу исключение. Итак, я пробовал и пробовал, и только при 190 символах я могу быть уверен, что он также подходит для базы данных. Поэтому в будущем, чтобы предотвратить проблемы, я всегда буду делать размер varchar () на 20% больше, чем то, что пользователь может ввести на html-странице.
Varcar (200) в mySql не соответствует атрибуту maxLength = 200 текстового поля html
Ответы (2)
Если говорить о максимальной длине, то каждый carriage returns
считается двумя символами. Можете ли вы убедиться, что у вас есть возврат каретки.
1\r\n
1\r\n
1\r\n
1
varchar(200)
должен иметь возможность хранить 200 символов. Вам не нужно увеличивать размер, но если вы это сделаете, произвольное увеличение на 10% не гарантирует решения проблемы, если вы не знаете, что ее вызывает. Сохранится опасность переполнения.
Некоторые возможные причины, которые приходят на ум:
- Как отметил @VigneshKumarA, это может быть возврат каретки, сохраненный как два символа.
- Это также могут быть многобайтовые символы Юникода, то есть все, что угодно, кроме базового набора символов ASCII. Если вы вводите буквы или символы с диакритическими знаками или нелатинские шрифты, они занимают более одного байта на символ.
- Экранированные / закодированные символы, если вы дезинфицируете свои данные. Например, если вы используете
htmlentities()
или аналогичный для входной строки, вы можете получать отдельные символы из входных данных, которые преобразуются в коды сущностей, такие как&
. Это, очевидно, сделает строку длиннее, чем была при вводе.
Я бы порекомендовал вам использовать инструмент базы данных для изучения сохраненных данных и проверки, почему он хранит больше символов, чем вы ожидали. Поймите, чем вызвано несоответствие, а затем либо исправьте его, либо адаптируйте свою систему, чтобы справиться с ним, чтобы вы могли быть уверены, что оно никогда не переполнится.