我现在有点困惑我有一个与charset = utf8的PDO连接
并且DB使用拉丁语.
并且DB使用拉丁语.
这是什么意思 ?
我的想法是,这意味着由PHP发送或从DB接收的每个连接都被编码为utf8.但是我读了很多,DB也应该使用与PHP相同的字符集.
假设PHP将一些文本发送到MysqL进行存储,就像这样
原文链接:https://www.f2er.com/php/136920.htmlINSERT INTO `some_table` ("foo") VALUES ('The quick brown fox jumps over the lazy dog');
这个查询的基本意图显然是告诉MysqL存储字符串.快速的棕色狐狸跳过懒狗进入数据库.
如果PHP配置为使用UTF-8,则意味着当它将人类可读字符转换为二进制时 – 为了将其传输到MysqL – 它将使用UTF-8编码系统转换字符.MysqL可以读取以UTF-8编码的字符,因此在理解数字编码序列意味着T和h和e等方面没有问题 – 用人类可读的字符.如果MysqL配置为使用latin1在some_table表中存储数据,则当它接收到字符串时,它会将字符从其UTF-8编码转换为latin1等值,然后再将数据保存到硬盘.在这种情况下没有问题 – 因为英文字母字符可以用UTF-8和Latin1表示.但是,如果PHP发送的字符串包含只能由UTF-8而不是Latin1表示的字符,则会出现问题.一个聪明的报价“.当MysqL试图将智能引用“转换为数字形式时,它将无法 – 因为Latin1字面上没有定义的数字编码来代表”.我不确定MysqL遇到这种情况时的确切错误管理过程是什么,以及情况是否可恢复,但最终结果是底层编码将被破坏且无法使用.因为这个问题只发生在两个系统无法表示的那些字符上 – 如果你所有通信的99%都涉及英文字符,你可能不会注意到问题很长一段时间,即使这样,它也只是偶然的字符,但是当你注意到问题时试图恢复可能会令人沮丧.