【发布时间】:2017-07-25 14:37:52
【问题描述】:
已经有很多关于为 mysql 选择正确字符集的帖子,但对于 Rocksdb 引擎来说,这又是一个不同的(而且非常令人沮丧)的故事。
首先,我决定使用 utf8-binary 作为字符集(myrocks 支持 latin1、utf8-bin 和二进制),因为我的数据可能包含特殊字符,我想保存。
此外,我正在使用 PHP 和 PDO 将数据加载到 mysql 中,连接如下所示:
$pdo = new PDO('mysql:host=localhost;dbname=dbname;charset=utf8', 'user', 'password');
所以我将字符集设置为 utf8(我也尝试使用 utf8_bin,但 PDO 不支持)。虽然,我可以插入一些行,但有时我会收到如下错误:
不正确的字符串值:“column_name”列的“\xF0\x9F\x87\xA8\xF0\x9F...”
但是现在的错误是什么?此十六进制序列编码一个 unicode-smily(区域指示符号字母 c + 区域指示符号字母 n)。对我来说,似乎有效的 utf8 和 mysql 以及 php 都配置为使用它。
【问题讨论】:
-
您可能需要更新您的帖子以包含完整的查询和传递的值。如果您还没有,您也可以尝试使用准备好的语句。问题不清楚。
-
问题是它只是很少发生,因此重现它并不容易。但我认为,错误信息已经很好了,因为我知道我无法存储 unicode 笑脸。我在某处读到 mysql 的 utf8 可能是问题所在,因为它不能正确处理多字节字符,而 utf8mb4 更好,但rocksdb 不支持 utf8mb4:/
-
@Fred-ii- 感谢您的努力,但正如我已经提到的:rocksdb 不支持 utf8mb4(至少我无法在文档中找到它),但它是解决方案你所有的帖子...
-
不客气。不幸的是,我不了解rocksdb,所以我不会在那里提供任何帮助,抱歉。祝你找到解决方案一切顺利,干杯
标签: php mysql utf-8 character-encoding rocksdb