从请求中得到很高的解释只会加强这个问题。
APP有一个聊天系统,它是HTML的后期,用ajax发送给PHP,但高级用户尝试在他得到的数据库中插入你设备的一些表情符号(情感):“???”作为一条信息。如何更改此设置,以便根据每个情感和网站列表的值接收某种代码?
答案 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。该应用程序在验证后正在更改会话中的排序规则。
答案 1 :(得分:6)
这是一个字符集问题,而不仅仅是一个表情符号问题。
始终使用CHARACTER SET utf8mb4
。
mysqli_set_charset
或PDO等效)<meta ... utf-8>
。