Получение длин различных закодированных строк в байтах, например. 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 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему моя функция strlen не возвращает правильную длину cstring? [закрыто]
    Гость » » в форуме C++
    0 Ответы
    22 Просмотры
    Последнее сообщение Гость
  • Вернет ли php mb_strlen($str,’utf8’) больший результат, чем JavaScript .length?
    Anonymous » » в форуме Php
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Вернет ли php mb_strlen($str,’utf8’) больший результат, чем JavaScript .length?
    Anonymous » » в форуме Php
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Вернет ли php mb_strlen($str,’utf8’) больший результат, чем JavaScript .length?
    Anonymous » » в форуме Php
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Невозможно определить длину байтов, закодированных в Mulaw, в Python
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous

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