将 UTF-8 编码字符串插入 UTF-8 编码表会给出不正确的字符串值。
PDOException: SQLSTATE[HY000]: 一般错误: 1366 不正确的字符串值: '\xF0\x9D\x84\x8E i...' 对于第 1 行的列 'body_value': INSERT INTO
我有一个????
字符,在一个字符串中mb_检测_编码 http://php.net/manual/en/function.mb-detect-encoding.php声明是 UTF-8 编码的。
我尝试将此字符串插入到 MySQL 表中,该表定义为(除其他外)DEFAULT CHARSET=utf8
Edit:Drupal 总是这样做SET NAMES utf8
与可选的COLLATE
(至少在与 MySQL 交谈时)。
Edit 2:一些似乎相关的更多细节。我从 PostgreSQL 数据库中获取一些文本。我将其粘贴到一个对象上,使用 mb_detect_encoding 来验证它是否为 UTF-8,并将该对象持久保存到数据库中,使用节点保存 http://api.drupal.org/api/drupal/modules!node!node.module/function/node_save/7。因此,虽然有触发导入的 HTTP 请求,但数据并非来自浏览器。
Edit 3:数据在两个表上进行非规范化:
从信息架构中选择字符集名称。COLUMNS
C WHERE table_schema = "[database]" AND table_name IN ("field_data_body", "field_revision_body") AND column_name = "body_value";
>+--------------------+
| character_set_name |
+--------------------+
| utf8 |
| utf8 |
+--------------------+
Edit 4:这个角色有可能是“新人”吗?我有点模糊unicode和UTF-8的关系 https://stackoverflow.com/questions/643694/utf-8-vs-unicode, 但是这个维基百科文章 http://en.wikipedia.org/wiki/List_of_Unicode_characters#Musical_symbols,意味着该角色最近才被标准化。
我不明白为什么会因“字符串值不正确”而失败。
???? (U+1D10E) 是在 BMP(基本多语言平面)(U+FFFF 之上)之外找到的字符 Unicode,因此无法以 3 个字节的 UTF-8 表示。 MySQL 字符集 utf8 仅接受可以用 3 个字节表示的 UTF-8 字符。如果需要将其存储在 MySQL 中,则需要使用 MySQL 字符集 utf8mb4。您需要 MySQL 5.5.3 或更高版本。您可以使用 ALTER TABLE 更改字符集,没有太大问题;由于它需要更多空间来存储字符,因此会出现一些问题,可能需要您减小字符串大小。看http://dev.mysql.com/doc/refman/5.5/en/charset-unicode-upgrading.html http://dev.mysql.com/doc/refman/5.5/en/charset-unicode-upgrading.html .
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)