首页 / 帖子
Mysql出现 Incorrect string value for a field的问题

具体情况是:Mysql报错 Incorrect string value for a field。

原因是Drupal的一个字段有一些特殊的符号,比如emoj符号。

网上看了一下貌似是UTF8的问题,不知道Drupal如何解决?

1个答案
陈蹊
发布于:2015-09-02 15:05

遇到过此类问题,主要的原因是,MySQL 的UTF8是3个字节的UTF8,遇到4个字节的UTF8就报错了。

因此,解决方法

  1. 升级Drupal的MySQL的格式为utf8mb4,用phpmyadmin打开表格,修改编码为UTF-8 Unicode (utf8mb4)。主要涉及的表包括field_data_body、field_revision_body。

    参考:  

    http://www.midwesternmac.com/blogs/jeff-geerling/solving-emoji-problem-drupal-7 

    https://www.drupal.org/node/1824506 

  2. 用Blob存储,不用varchar/text。(自己没测试过)
    参考: http://jessej.blog.163.com/blog/static/6501024820139130509860/ 

  3. 替换掉特殊字符,具体用下面的函数


function replace4byte($string) {
    return preg_replace('%(?:
          \xF0[\x90-\xBF][\x80-\xBF]{2}      # planes 1-3
        | [\xF1-\xF3][\x80-\xBF]{3}          # planes 4-15
        | \xF4[\x80-\x8F][\x80-\xBF]{2}      # plane 16
    )%xs', '', $string);    }