PHP和MySQL之间的字符集

前端之家收集整理的这篇文章主要介绍了PHP和MySQL之间的字符集前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我现在有点困惑我有一个与charset = utf8的PDO连接
并且DB使用拉丁语.

这是什么意思 ?

我的想法是,这意味着由PHP发送或从DB接收的每个连接都被编码为utf8.但是我读了很多,DB也应该使用与@R_301_461@相同的字符集.

任何人都可以详细解释字符集在@R_301_461@和MysqL数据库中的作用,以及对齐它们的好处是什么?

假设@R_301_461@将一些文本发送到MysqL进行存储,就像这样
INSERT INTO `some_table` ("foo") VALUES 
('The quick brown fox jumps over the lazy dog');

这个查询的基本意图显然是告诉MysqL存储字符串.快速的棕色狐狸跳过懒狗进入数据库.

如果@R_301_461@配置为使用UTF-8,则意味着当它将人类可读字符转换为二进制时 – 为了将其传输到MysqL – 它将使用UTF-8编码系统转换字符.MysqL可以读取以UTF-8编码的字符,因此在理解数字编码序列意味着T和h和e等方面没有问题 – 用人类可读的字符.如果MysqL配置为使用latin1在some_table表中存储数据,则当它接收到字符串时,它会将字符从其UTF-8编码转换为latin1等值,然后再将数据保存到硬盘.在这种情况下没有问题 – 因为英文字母字符可以用UTF-8和Latin1表示.但是,如果@R_301_461@发送的字符串包含只能由UTF-8而不是Latin1表示的字符,则会出现问题.一个聪明的报价“.当MysqL试图将智能引用“转换为数字形式时,它将无法 – 因为Latin1字面上没有定义的数字编码来代表”.我不确定MysqL遇到这种情况时的确切错误管理过程是什么,以及情况是否可恢复,但最终结果是底层编码将被破坏且无法使用.因为这个问题只发生在两个系统无法表示的那些字符上 – 如果你所有通信的99%都涉及英文字符,你可能不会注意到问题很长一段时间,即使这样,它也只是偶然的字符,但是当你注意到问题时试图恢复可能会令人沮丧.

猜你在找的PHP相关文章