将UTF-8编码的字符串插入到UTF-8编码的表中会导致错误的字符串值。
PDOException:SQLSTATE [HY000]:一般性错误:1366列'body_value'的行1处存在不正确的字符串值:INSERT INTO
我有一个包含字符的字符串,mb_detect_encoding声称其为UTF-8编码。
我尝试将该字符串插入到MySQL表中,该表被定义为(除其他外)DEFAULT CHARSET = utf8
编辑:Drupal始终使用可选的COLLATE
进行SET NAMES utf8
(至少在与MySQL交互时)。
编辑2:似乎还有一些相关细节。我从PostgreSQL数据库中获取了一些文本。我将其放到一个对象上,使用mb_detect_encoding验证它是否为UTF-8,并使用node_save将对象持久化到数据库中。因此,虽然有一个HTTP请求触发了导入,但数据并不来自浏览器。
编辑3: 数据规范化在两个表上:
SELECT character_set_name FROM information_schema.COLUMNS C WHERE table_schema =“[database]”AND table_name IN(“field_data_body”,“field_revision_body”)AND column_name =“body_value”;
<code>>+--------------------+
| character_set_name |
+--------------------+
| utf8 |
| utf8 |
+--------------------+
</code>
编辑 4:这个字符可能是“to new”(全新的)吗?我对Unicode和UTF-8之间的关系有些模糊,但是这篇StackOverflow问题 和这篇维基百科文章都暗示着这个字符是最近才被标准化。
我不明白为什么会出现“Incorrect string value”的错误。
SELECT character_set_name FROM information_schema.\
COLUMNS` C WHERE table_schema = "db_name" AND table_name = "table_name" AND column_name = "column_name";` 给出什么结果? - Esailijautf8
只包含BMP字符集。而它的utf8mb4
对应于国际标准的UTF-8
(并包括4字节字符)。 - Rick James