Mysql 1366 错误是因为插入的数据编码与数据表设置编码冲突所导致的。
通过日志发现,是由于插入的内容有特殊表情,而数据表的格式,是utf8_general_ci规则的。
解决方式:
最常见的是,做微信开发时,客户的微信昵称千奇百怪的,各种符号,一定要做处理才存进数据库
public static function removeEmoji($text) { if ($text == '') return ''; $clean_text = ""; // Match Emoticons $regexEmoticons = '/[\x{1F600}-\x{1F64F}]/u'; $clean_text = preg_replace($regexEmoticons, '', $text); // Match Miscellaneous Symbols and Pictographs $regexSymbols = '/[\x{1F300}-\x{1F5FF}]/u'; $clean_text = preg_replace($regexSymbols, '', $clean_text); // Match Transport And Map Symbols $regexTransport = '/[\x{1F680}-\x{1F6FF}]/u'; $clean_text = preg_replace($regexTransport, '', $clean_text); // Match Miscellaneous Symbols $regexMisc = '/[\x{2600}-\x{26FF}]/u'; $clean_text = preg_replace($regexMisc, '', $clean_text); // Match Dingbats $regexDingbats = '/[\x{2700}-\x{27BF}]/u'; $clean_text = preg_replace($regexDingbats, '', $clean_text); $message = json_encode($clean_text); return json_decode(preg_replace("#(\\\ud[0-9a-f]{3})#i", "", $message), true); //return $clean_text; }
众所周知,mysql的utf8mb4才是真正的utf8编码。
在网上看到一些文章说,将数据库的字符集改成utf8mb4就可以存储表情了。
其实在前两年我做过一个实验发现,修改编码后有某些表情还是无法存入数据库= . = (有可能是表情迭代太快啦?)
如果觉得博客文章对您有帮助,异或土豪有钱任性,可以通过以下扫码向我捐助。也可以动动手指,帮我分享和传播。您的肯定,是我不懈努力的动力!感谢各位亲~