昨天晚上在测试一个帝国CMS的文章功能的时候发现了一个比较有意思的事情,就是我复制的内容里面有表情符号,发布到帝国CMS的时候内容为空,自己随便输入的文字又能发布成功,属实有点楞,后来慢慢排除发现是字符串的问题。
原因,MySQL 中使用 utf8是utf8mb3仅支持三个字节存储,utf8mb4才是才是存储4个字节。MySQL数据库表设计的时候,需要注意,Mysql的UTF-8只支持三个字节的存储,而一般字符是三个字节,但是emoji表情是4个字节,所以存储不了。为了解决这个问题,Mysql在5.5.3版本之后转而支持了存储4个字节的utf8字符,字符集为utf8mb4。
以下是几种执行此操作的方法:
1. 使用 REGEXP_REPLACE() 函数
REGEXP_REPLACE() 函数允许您使用正则表达式替换匹配的子字符串。要移除特殊字符,可以使用以下模式:
1 |
|
此模式将匹配所有非字母数字字符和空格,并将其替换为空字符串。
2. 使用 TRANSLATE() 函数
TRANSLATE() 函数允许您将一组字符翻译为另一组字符。要移除特殊字符,可以使用以下模式:
1 |
|
此模式将匹配所有非字母数字字符和空格,并将其翻译为空字符串。
3. 使用 TRIM() 函数
TRIM() 函数可用于从字符串中移除指定字符。要移除特殊字符,可以使用以下模式:
1 |
|
此模式将从字符串两端移除所有非字母数字字符和空格。
4. 使用字符串方法
MySQL 还提供了一组字符串方法,可用于执行各种操作。要移除特殊字符,可以使用以下方法:
1 |
|
此方法使用正则表达式来匹配所有非字母数字字符和空格,并将其替换为空字符串。
示例
以下查询演示了如何使用 REGEXP_REPLACE() 函数从字符串中移除特殊字符:
1 |
|
结果:
1 |
|
当然最简单的是只要你的mysql版本在5.5.3以上就可以通过直接把表改为utf8mb4就可以了。