我串联了一个由21个ASCII字符组成的字符串(可以是0到255之间的任何ASCII字符),并且我试图将此字符串存储到MySQL数据库表的VARCHAR中。
但是,它似乎无法正确存储到数据库中-有时String有点长,或者当它不太长而我又读回来时,它给了我错误的字符。

什么排序规则/配置可以使我做到这一点?我使用PHP作为编程语言,并且通过PuTTy在Linux服务器上运行。

表的架构:

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


邮递区号:
($ 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,它可能会通过OK。

utf8utf8mb4很可能会破坏您的价值观。

也许您要VARBINARYBLOB?那些没有字符集的概念;它只有8位字节。

10-07 13:25
查看更多