使用PHP在MySQL数据库中插入表情符号智能手机?

时间:2015-08-03 16:24:21

标签: mysql php

从请求中得到很高的解释只会加强这个问题。

APP有一个聊天系统,它是HTML的后期,用ajax发送给PHP,但高级用户尝试在他得到的数据库中插入你设备的一些表情符号(情感):“???”作为一条信息。

如何更改此设置,以便根据每个情感和网站列表的值接收某种代码?

enter image description here

2 个答案:

答案 0 :(得分:8)

如果你使用的是InnoDB,我内心有这种下沉感,你有一个字符集问题。

连接到MySQL时,请运行此查询

select
    A.variable_name,
    A.variable_value global_value,
    B.variable_value session_value
from
(
    select * from information_schema.global_variables
    where variable_name like 'collation%'
) A
inner join
(
    select * from information_schema.session_variables
    where variable_name like 'collation%'
) B
using (variable_name);

我的猜测是你会看到差异,尤其是collation_connection

我的建议:让会话的collation_connection与全局值相同。

select A.variable_value,B.variable_value,C.variable_value
into @coll_conn,@coll_db,@coll_srvr from
(
    select * from information_schema.global_variables
    where variable_name like 'collation_connection'
) A,
(
    select * from information_schema.global_variables
    where variable_name like 'collation_database'
) B,
(
    select * from information_schema.global_variables
    where variable_name like 'collation_server'
) C;
set session collation_connection = @coll_conn;
set session collation_database = @coll_db;
set session collation_server = @coll_srvr;

然后,您可以通过再次运行第一个查询来验证会话中的更改。

给它一个尝试!!!

注意:我只是建议这样做,因为上周开发人员向我提出了这种情况并运行了相同的查询showing him that the database was not at fault。该应用程序在验证后正在更改会话中的排序规则。

Not The Database

答案 1 :(得分:6)

这是一个字符集问题,而不仅仅是一个表情符号问题。

始终使用CHARACTER SET utf8mb4

  • 在客户端
  • 在连接中(mysqli_set_charset或PDO等效)
  • 在表格(或列)中定义
  • html标题中的
  • <meta ... utf-8>