我有一个站点接受来自用户的基于表单的输入并存储到mysql(i)数据库中。 99%的用户来自美国。可以通过utf8_decode整个SQL语句来避免utf-8/utf8mb4问题吗?
如果用户在移动设备上并决定在其中一个表单字段中使用表情符号很有趣,则在尝试更新或插入时,生成的SQL会导致失败。这是由于表情符号在utf-8之外,因此UX和数据库之间的编码不匹配。我相信我理解潜在的问题。
我在MySQL 5.5中,所以我实际上可以支持utf8mb4字符集 - 但是我需要一段时间才能解决这个问题。
在此期间,这将是确定/安全只是这样做(在PHP):
$sql = "INSERT INTO my_table ... *long insert statement across two dozen rows*";
$sql = utf8_decode($sql);
$db->sql_query($sql);
所以 - 简单地迫使整个SQL语句为UTF-8?我意识到表情符号和其他一些可能转换为“?” - 但只要声明本身没有被破坏,或者我不会丢失用户的正常文本输入,我就可以做到这一点。
这个想法的任何问题作为一个临时修复,直到我可以转换表的模式来使用utf8mb4?
编辑:从数据库中返回的错误看起来是这样的:
"Incorrect string value: '\xF0\x9F\x99\x8A...' for column..."
UTF-8涵盖了所有的Unicode,也是表情符号。但是,自从Unicode版本6.0以来,表情符号就存在了。弱点似乎更多的是没有这些字符的字体。也许可以替换'[\ u1F300- \ u1F5F]'。 –
谢谢,但这会变得非常迅速。移动设备上的这些表情符号不限制在单个字符范围内。我想,我必须保留某种地图。 –
@Joop如果有一个实际的错误被抛出(“失败”...?),那么这几乎不是一个字体问题。 – deceze