在mysql中插入备注时,备注中的撇号将更改为:?changed™
例如:
$id = 1;
$body = "How have things been with you? Hope it’s going well on your end...";
$q = "INSERT INTO notes (id, note) VALUES (?, ?)";
$stmt = $mysqli->prepare($q);
$stmt->bind_param('is', $id, $body);
$stmt->execute();
$stmt->close();保存到数据库,如下所示:
How have things been with you? Hope it’s going well on your end...如果我使用普通的撇号,它可以工作,例如:
$id = 1;
$body = "How have things been with you? Hope it's going well on your end...";
$q = "INSERT INTO notes (id, note) VALUES (?, ?)";
$stmt = $mysqli->prepare($q);
$stmt->bind_param('is', $id, $body);
$stmt->execute();
$stmt->close();保存到数据库,如下所示:
How have things been with you? Hope it's going well on your end...正确的方法是什么才能使第一个示例撇号按预期保存?
数据库
Name Type Collation
note longtext utf8_general_ci 发布于 2021-07-31 18:20:15
因为数据的呈现在一端的输入和另一端的呈现之间的某个地方发生了变化,这很可能是由mysql客户端应用程序(例如php)提供的字符集与服务器上配置的字符集以及提供给web浏览器的字符集之间的问题。
不要将排序规则(定义字典顺序)与字符集混淆。在比较文本之前,您可以忽略排序规则。
所有字符集都定义了应该为某个字节序列呈现哪个字符。但并不是所有的字节序列都代表每个字符集中的相同字符。因此,除了存储文本的字节之外,您还必须确保通知mysql连接和http服务器端您将如何处理字节序列。
字符集通过几种不同的方式发挥作用:
将具有用于网页呈现的默认字符集
所有这些都必须匹配,才能正确地存储、传输和呈现数据。
在ASCII、unicode、iso8859-1和许多其他字符集中,字节值0-127是相同的,这就是为什么大多数消息都能正确存储的原因。
在mysql端,客户端需要通知服务器它提供给服务器的数据的字符集。如果它告诉服务器数据是latin1格式的,然后提供utf-8数据,服务器就无法知道所提供的字符集是不正确的。
同样,在浏览器端,web服务器必须通知客户端其数据的字符集。如果它在mysql端使用latin1,并将数据放入web响应中,并将其视为utf-8,则相同的数据将不会呈现相同的内容。
对于某些客户端,不同位置的字符集的各种组合可能最终会准确地表示数据,但所有这些字符集在任何地方都是不同的总是不正确的。
(https://www.mysqltutorial.org/mysql-character-set/#:~:text=A%20MySQL%20character%20set%20is,letter%20a%20is%20the%20encoding.)如果您想更多地考虑字符集,本教程似乎已经很好地解释了它。
https://stackoverflow.com/questions/68604495
复制相似问题