Я связал строку из 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;
ASCII составляет всего 0,127. Исправьте свой вопрос.
Не видя SHOW CREATE TABLE
Нам трудно судить, в чем проблема. Если рассматриваемая колонка CHARACTER SET ascii
, тогда вы будете делать неприятные вещи с внешними 128 значениями, когда будете пытаться их сохранить.
За CHARACTER SET latin1
, это может пройти хорошо.
utf8
а также utf8mb4
очень вероятно квакает на ваших ценностях.
Может ты хочешь VARBINARY
или же BLOB
? У тех нет понятия набора символов; это просто 8-битные байты.
Других решений пока нет …