Chaning table collat​​ion LIKE子句不返回任何内容

时间:2018-01-02 08:53:02

标签: php mysql emoji

我最近改变了从Godaddy到Hostinger的托管。这改变导致表情符号没有正确显示(随机字符)。

所以我跟进了Hostinger article修复了这个没有帮助的问题。

所以我在SO上尝试了其他一些提到的解决方案。其中包括运行时的set charset。

$sql = "set character_set_client=utf8";
mysqli_query($con, $sql);
$sql = "set character_set_connection=utf8";
mysqli_query($con, $sql);
$sql = "set character_set_results=utf8";
mysqli_query($con, $sql);
$sql = "set character_set_server=utf8";
mysqli_query($con, $sql);

这也没有做任何事情。所以我将我的表格列Collat​​ion更改为utf8mb4_bin并修复了我的表情符号。所有表情符号都显示正确。

但是现在用于搜索的LIKE子句不会返回任何内容。

SQL

SELECT * FROM `allfiles` WHERE `file_name` LIKE '%some name%'

修改

我无法使用utf8mb_bin collat​​ion在phpmyadmin中搜索

  

数据库服务器信息

本地主机

Server: Localhost via UNIX socket
Server type: MariaDB
Server version: 10.1.26-MariaDB - Source distribution
Protocol version: 10
User: root@localhost
Server charset: UTF-8 Unicode (utf8)

Hostinger

Server: 127.0.0.1 via TCP/IP
Server type: MariaDB
Server version: 10.1.29-MariaDB - MariaDB Server
Protocol version: 10
User: user@127.0.0.1
Server charset: UTF-8 Unicode (utf8)

Godaddy的

Server: Localhost via UNIX socket
Server type: MySQL
Server version: 5.6.36-cll-lve - MySQL Community Server (GPL)
Protocol version: 10
User: user@localhost
Server charset: UTF-8 Unicode (utf8)

另外。在不更改列排序规则或在运行时指定字符集的情况下,我可以在localhost和godaddy上完全正常地查看表情符号。

1 个答案:

答案 0 :(得分:0)

我找到了解决我主要问题的方法。

使用mysqli_character_set_name($con)我得到了正确的字符集,使用了godaddy& localhost。返回latin1

所以我使用mysqli_set_charset($con, "latin1");修复了charset,它返回了正确的表情符号。

仍然不确定为什么将列排序规则更改为utf8mb4导致LIKE子句不返回任何结果。