如何在MySQL数据库中支持完整Unicode
已发表 2012年7月30日·用MySQL标记,安全性,Unicode
替代标题:我们为正确存储U + 1F4A9 PILE OF POO(💩)所做的事情。
您是否utf8在数据库中使用MySQL的字符集?在这篇文章中,我将解释为什么您应该改用utf8mb4它,以及如何进行切换。
UTF-8
UTF-8编码可以表示Unicode字符集中的每个符号,范围从U + 000000到U + 10FFFF。那是1,114,112个可能的符号。(尚未为所有这些Unicode代码点分配所有字符,但这不会阻止UTF-8对其进行编码。)
UTF-8是可变宽度编码;它使用一到四个8位字节对每个符号进行编码。具有较低数字编码点值的符号使用较少的字节进行编码。这样,对于使用ASCII字符和其他BMP符号(其代码点范围从U + 000000到U + 00FFFF)的常见情况,UTF-8进行了优化,同时仍允许使用星体符号(其代码点范围从U + 010000开始)到U + 10FFFF)。
MySQL的 utf8
很长时间以来,我一直将MySQL的utf8字符集用于数据库,表和列,并假设它映射到上述的UTF-8编码。通过使用utf8,我可以将所需的任何符号存储在数据库中-或如此。
在写有关JavaScript内部字符编码的文章时,我注意到无法将U + 1D306 TETRAGRAM FOR CENTER(𝌆)符号插入该站点后面的MySQL数据库中。我尝试更新的列具有utf8_unicode_ci排序规则,并且连接字符集设置为utf8。
mysql>设置名称utf8; #只是强调将连接字符集设置为utf8
,
查询正常,受影响的行数为0(0.00秒)
。mysql> UPDATE database_name.table_name SET column_name ='foo𝌆bar’WHERE id = 9001;
查询正常,影响1行,1警告(0.00秒)
匹配的行:1已更改:1警告:1
mysql> SELECT column_name FROM database_name.table_name WHERE id = 9001;
- ------------- +
| column