PHP中的表情符号支持&;MySQL

PHP中的表情符号支持&;MySQL,php,mysql,utf-8,emoji,Php,Mysql,Utf 8,Emoji,我被要求为一个由PHP API支持的应用程序启用表情符号支持。该应用程序目前仅限于iPhone(我没有,但我假设它上面有表情符号?) 无论如何,我注意到数据库出于某种原因到处都使用拉丁语和瑞典语。但由于我不确定utf-8是否能支持完整表情符号范围所需的4字节字符串,我开始在谷歌上搜索,但无法从结果中得到完整答案 因此: 为了支持表情符号,字符集/排序规则是否需要在mysql中设置为utf-8或utf-8MB4 如果字符集需要设置为utf8mb4,utf8和utf8mb4之间的区别是什么(utf8

我被要求为一个由PHP API支持的应用程序启用表情符号支持。该应用程序目前仅限于iPhone(我没有,但我假设它上面有表情符号?)

无论如何,我注意到数据库出于某种原因到处都使用拉丁语和瑞典语。但由于我不确定utf-8是否能支持完整表情符号范围所需的4字节字符串,我开始在谷歌上搜索,但无法从结果中得到完整答案

因此:

  • 为了支持表情符号,字符集/排序规则是否需要在mysql中设置为utf-8或utf-8MB4

  • 如果字符集需要设置为utf8mb4,utf8和utf8mb4之间的区别是什么(utf8最多支持4个字节,不是吗?)。它是否强制以固定宽度的4字节表示形式存储字符(假设每个chatacter需要4倍以上的存储空间,即使在标准ascii范围(通常为1字节)上也是如此)

  • 在mysql查询中可以将utf8与utf8mb4进行比较吗?如果我尝试对另一个表的utf8列执行全文搜索,或者在utf8mb4字符集上执行where子句,该怎么办

  • PHP是否支持4字节字符串,而不必使用诸如mb_字符串之类的特殊库?i、 e.我可以只分配
    $var=$\u POST['text']
    并执行类似
    $emoji\u var=='xxxx'
    的操作吗?或者我必须在PHP中更改所有字符串才能使用mbstring并更改所有比较器e.c.t


  • 只是想弄清楚支持表情符号需要做多少工作,以及这样做的注意事项。因此,任何帮助都将是巨大的

    Re 2.),阅读:mySQL中的UTF-8只能存储基本多语言平面中的字符。对,奇怪的是,它只允许3个字节。我确信有一个技术上的原因超出了我的理解,那就是根据标准不支持utf8这样的4字节。所以现在我知道mysql表需要设置为utf8mb4!所以我想只剩下问题3和4了。表情符号似乎是三字节序列:但我不确定它们是否在基本的多语言层面上。最简单的方法可能是尝试:复制并粘贴其中一个字符-尝试将它们存储在mySQL中,看看会发生什么情况(图4),如果要对字符串执行操作,可能会对单字节字符串和多字节字符串产生不同的结果,例如在特定字符位置剪切字符串,则必须使用特殊的多字节库。如果只是按原样存储数据,应该没问题。我确实读过一个版本的表情符号wiki,但更为精简,并且提到只有一些表情符号是3字节的,您需要4字节来支持整个范围。