myrocks (mariadb + rocksdb) php 字符集

myrocks (mariadb + rocksdb) php charset

已经有很多关于为 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不支持)。虽然,我能够插入一些行,但有时会出现如下错误:

Incorrect string value: '\xF0\x9F\x87\xA8\xF0\x9F...' for column 'column_name'

但是现在错误是什么?这个十六进制序列编码一个 unicode-smily(区域指示符号字母 c + 区域指示符号字母 n)。对我来说似乎有效的 utf8 和 mysql 以及 php 被配置为使用它。

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

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

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