code: public static String unicodeUTF8mb4String(String s) {
      if (Strings.isNullOrEmpty(s)) return "";
      int len = s.length();
      StringBuilder sbd = new StringBuilder(len);
      for (int i = 0; i < len; i++) {
        char c = s.charAt(i);
        if (c > '\u9fa5') { //非正常汉字范围
          if (c >= '\uff00' && c <= '\uffef') { //全角字符范围
            sbd.append(c);
          } else {
            sbd.append(toUnicodeString(c));
          }
        } else if (c == '\\') {
          if (i + 3 < len && s.charAt(i + 1) == 'u' && isHexChar(s.charAt(i + 2))) {
            sbd.append('\u0003');
          }
          sbd.append(c);
        } else {
          sbd.append(c);
        }
      }
  
      return sbd.length() != len ? sbd.toString() : s;
    }
docs: utf8可以编码1-6字节的字符，但是mysql5.5版本之前只能支持3字节，这里针对4字节以上的进行编码。
  http://baike.baidu.com/view/25412.htm
  正常汉字范围在 4e00 - 9fa5，全角字符在 ff00 - ffef，超过这个范围的就使用unicode进行编码。
  针对已经是\\uxxxx编码的pattern，在其前面放一个0x03的不可见字符做标识，decode的时候不做处理。
  @param s
  @return