Сохранить любой символ из таблицы ASCII от 0 до 255 в MySQL VARCHAR (22)?

Я связал строку из 21 символа ASCII (который может быть любым символом ASCII от 0 до 255) и пытаюсь сохранить эту строку в VARCHAR в таблице базы данных MySQL.
Однако, похоже, что он не сохраняется должным образом в базе данных — иногда строка слишком длинная, или когда она не слишком длинная, и я читаю ее обратно, она дает мне неправильные символы.

Какие параметры сортировки / конфигурации позволят мне это сделать? Я использую PHP в качестве языка программирования и работаю на сервере Linux через PuTTy.

Схема для таблицы:

ID ...
FirstName ...
LastName ...
Email ...
HoursRange | varchar(22) | YES | | NULL | |

Код php:
($ hoursRange — это строка из 168 битов, которую я преобразую в строку из 21 символа)

$toBytes = "";
for($i = 0; $i < 168; $i+=8){
$decVal = bindec(substr($hoursRange, $i, $i+8)); // this becomes decimal
$toBytes = $toBytes . chr($decVal);
}

Затем я храню его в базе данных:

$notice->addSubscriber($firstName, $lastName, $email, $toBytes);

Добавить подписчика (функция принимает 4 параметра):

$stmt = $this->conn->prepare("INSERT INTO Subscribers (FirstName, LastName, Email, HoursRange) VALUES(:fname, :lname, :email, :hoursRange)");
$stmt->bindparam(":fname", $FirstName);
$stmt->bindparam(":lname", $LastName);
$stmt->bindparam(":email", $Email);
$stmt->bindparam(":hoursRange", $hoursRange);

$stmt->execute();
return $stmt;

0

Решение

ASCII составляет всего 0,127. Исправьте свой вопрос.

Не видя SHOW CREATE TABLEНам трудно судить, в чем проблема. Если рассматриваемая колонка CHARACTER SET ascii, тогда вы будете делать неприятные вещи с внешними 128 значениями, когда будете пытаться их сохранить.

За CHARACTER SET latin1, это может пройти хорошо.

utf8 а также utf8mb4 очень вероятно квакает на ваших ценностях.

Может ты хочешь VARBINARY или же BLOB? У тех нет понятия набора символов; это просто 8-битные байты.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector