我有一个站点,它接受来自用户的基于表单的输入并存储到 mysql(i) 数据库中。99% 的用户来自美国。
如果用户在移动设备上并认为在其中一个表单字段中使用表情符号会很有趣,则在尝试 UPDATE 或 INSERT 时生成的 SQL 会导致失败。这是因为表情符号在 utf-8 之外,因此 UX 和 DB 之间的编码不匹配。我相信我理解潜在的问题。
我在 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..."