微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何正确插入带有特殊字符的数据到mysql

如何解决如何正确插入带有特殊字符的数据到mysql

MysqL中插入注释时,注释中的撇号改为这样: ’

例如:

$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,$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     

解决方法

因为数据的渲染在一端的输入和另一端的呈现之间发生变化,这很可能是 mysql 客户端应用程序(例如 php)提供的字符集的问题,结合那些在服务器上配置的),以及那些提供给网络浏览器的。

不要将排序规则(定义字典顺序)与字符集混淆。在比较文本之前,您可以忽略排序规则。

所有字符集都定义了应该为特定字节序列呈现哪个字符。但并非所有字节序列都表示每个字符集中的相同 字符。因此,除了存储文本的字节之外,您还必须确保通知 mysql 连接 http 服务器端您将如何处理字节序列。

字符集有几种不同的作用:

  • 文本列定义包括字符集
  • Mysql 连接有一个可由客户端选择的字符集
  • mysql 服务器为
  • 提供默认字符集
  • 浏览器将具有用于网页呈现的默认字符集

所有这些都必须匹配才能正确存储、传输和呈现数据。

字节值 0-127 在 ASCII、unicode、iso8859-1 和许多其他字符集中是相同的,这就是为什么您的大部分消息确实得到了正确存储。

在mysql端,客户端需要将它提供给服务器的数据的字符集告知服务器。如果它告诉服务器数据在 latin1 中,然后提供 utf-8 数据,则服务器无法知道提供的字符集不正确。

同样,在浏览器端,Web 服务器必须将其数据的字符集通知给客户端。如果它在 mysql 端使用 latin1,并获取该数据并将其塞入一个被视为 utf-8 的 Web 响应中,则相同的数据将不会呈现相同的数据。

不同位置的字符集的各种组合最终可以准确地为某些客户端准确地表示数据,但是对于所有这些字符集来说,除了到处都一样。

(https://www.mysqltutorial.org/mysql-character-set/#:~:text=A%20MySQL%20character%20set%20is,letter%20a%20is%20the%20encoding.)[本教程] 如果您想更多地考虑字符集,似乎可以很好地解释它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。