我串联了一个由21个ASCII字符组成的字符串(可以是0到255之间的任何ASCII字符),并且我试图将此字符串存储到MySQL数据库表的VARCHAR中。 但是,它似乎无法正确存储到数据库中-有时String有点长,或者当它不太长而我读回时,它给了我错误的字符。
什么排序规则/配置可以使我做到这一点?我使用PHP作为编程语言,并且通过PuTTy在Linux服务器上运行。
表架构:
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 :(得分:1)
ASCII仅是0..127。解决您的问题。
在没有看到SHOW CREATE TABLE
的情况下,我们很难判断问题出在哪里。如果有问题的列是CHARACTER SET ascii
,那么当您尝试存储外部128个值时,您会感到讨厌。
对于CHARACTER SET latin1
,它可能会通过。
utf8
和utf8mb4
很可能会破坏您的价值观。
也许您想要VARBINARY
或BLOB
?那些没有字符集的概念;只是8位字节而已。