【问题标题】:myrocks (mariadb + rocksdb) php charsetmyrocks (mariadb + rocksdb) php 字符集
【发布时间】: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


【解决方案1】:

你必须有utf8mb4,而不是 MySQL 的子集utf8

? 需要一个 4 字节的 UTF-8 编码,十六进制 F09F87A8

如果rocksdb不支持,那么放弃这样的字符,或者rocksdb。更改 PDO 调用中的字符集以及需要它的列。

【讨论】:

    猜你喜欢
    • 2021-08-03
    • 1970-01-01
    • 2019-03-17
    • 2019-04-28
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多