Получение длин различных закодированных строк в байтах, например. strlen() вернет длину в байтах в utf8. Как получить длPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Получение длин различных закодированных строк в байтах, например. strlen() вернет длину в байтах в utf8. Как получить дл

Сообщение Anonymous »

Я пытаюсь проверить, превышает ли строка, которую я пытаюсь вставить в базу данных MySQL, заданный предел. например, столбец text может содержать максимум 65535 байт данных, но фактическое количество символов, которые я смогу ввести, будет зависеть от столбца кодировки.
мои столбцы имеют формат utf-16, поэтому он должен занимать примерно 32767 символов (не включая символы в МБ). Мой вопрос в том, что у меня есть строка длиной 21 КБ при проверке с помощью функции strlen(), но моя база данных выдает ошибку, потому что значение, которое я пытаюсь ввести, превышает предел. я пытаюсь выяснить, в чем именно здесь проблема.
как я могу проверить размер строки в байтах с помощью php? поэтому я могу проверить ту же сортировку базы данных mysql и выдать ее, не отправляя запрос к базе данных, на уровне php.
Я пробовал отлаживать размеры байтов и длины символов, выполняя некоторые сравнения, но безуспешно.
Я получаю эти результаты, когда сбрасываю сравнения для значения, которое пытаюсь вставить:

Код: Выделить всё

"max_bytes": 65535,
"strlen": 23271,
"mb_strlen": 23271,
"mb_strlen_utf8": 23271,
"mb_strlen_utf16": 11636,
"mb_strlen_utf32": 5817,
"schema_field": {
"type": "text",
"default": null,
"nullable": true,
"unique": false,
//---max_length shown as the CHARACTER_MAXIMUM_LENGTH of INFORMATION_SCHEMA table,
//The actual byte limit is 2 to the power of 16,
//so i should be fine unless i go over 65k bytes
"max_length": "32767",
"charset": "utf16"
},
значит, согласно этим сравнениям, его следует вставить, верно? я не знаю, смотрю ли я не в том месте или неправильно отлаживаю это.
strlen, вероятно, возвращает мне кодировку utf8 по умолчанию для PHP, и он также должен считать mb как отдельный байт, это то, что мне нужно, поэтому я не понимаю, в чем проблема.

Подробнее здесь: https://stackoverflow.com/questions/793 ... return-the
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»