将表情符号存储在 MySQL
Storing Emoji's in MySQL
我现在知道为了在 MySQL 中正确存储表情符号,必须将编码和排序规则设置为 'utf8mb4.' 问题是我的数据库中已经有很多行在 table 没有正确的编码和排序规则时插入的。有什么方法可以使用行中的当前信息来更新每一行,以便出现表情符号?
我将排序规则和编码更改为正确的值。但是,我好像做不到
$sql = "SELECT * FROM users";
$result = mysqli_query($con, $sql);
$count = mysqli_num_rows($result);
$i = 0;
while($row = mysqli_fetch_array($result)) {
$id[$i] = $row['id'];
$bio[$i] = $row['bio'];
$i++;
}
for($i=0;$i<$count;$i++) {
$sql = "UPDATE users SET bio = '".$bio[$i]."' WHERE id = '".$id[$i]."'";
mysqli_query($con, $sql);
}
我希望只查询所有行并更新每一行,因为我有正确的设置。但是,即使在更新每一行之后,表情符号也不会出现。有什么想法吗?
假设您已经正确设置了数据库、表和列的编码和排序规则属性,那么您应该不需要查询所有行并重新更新它们。
要尝试的第一个简单的事情是在 PHP 客户端连接中指定字符集,方法是添加:
mysqli_set_charset($your_mysqli_connect_link, 'utf8mb4');
在进行任何 mysqli_query()
调用之前。
现在确保您在服务器端也正确设置了所有字符集和排序规则属性。在 CLI 上试试这个:
mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%'
OR Variable_name LIKE 'collation%';
+--------------------------+--------------------+
| Variable_name | Value |
+--------------------------+--------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| collation_connection | utf8mb4_unicode_ci |
| collation_database | utf8mb4_unicode_ci |
| collation_server | utf8mb4_unicode_ci |
+--------------------------+--------------------+
确保您的 /etc/my.conf
具有所有正确的配置:
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
我现在知道为了在 MySQL 中正确存储表情符号,必须将编码和排序规则设置为 'utf8mb4.' 问题是我的数据库中已经有很多行在 table 没有正确的编码和排序规则时插入的。有什么方法可以使用行中的当前信息来更新每一行,以便出现表情符号?
我将排序规则和编码更改为正确的值。但是,我好像做不到
$sql = "SELECT * FROM users";
$result = mysqli_query($con, $sql);
$count = mysqli_num_rows($result);
$i = 0;
while($row = mysqli_fetch_array($result)) {
$id[$i] = $row['id'];
$bio[$i] = $row['bio'];
$i++;
}
for($i=0;$i<$count;$i++) {
$sql = "UPDATE users SET bio = '".$bio[$i]."' WHERE id = '".$id[$i]."'";
mysqli_query($con, $sql);
}
我希望只查询所有行并更新每一行,因为我有正确的设置。但是,即使在更新每一行之后,表情符号也不会出现。有什么想法吗?
假设您已经正确设置了数据库、表和列的编码和排序规则属性,那么您应该不需要查询所有行并重新更新它们。
要尝试的第一个简单的事情是在 PHP 客户端连接中指定字符集,方法是添加:
mysqli_set_charset($your_mysqli_connect_link, 'utf8mb4');
在进行任何 mysqli_query()
调用之前。
现在确保您在服务器端也正确设置了所有字符集和排序规则属性。在 CLI 上试试这个:
mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%'
OR Variable_name LIKE 'collation%';
+--------------------------+--------------------+
| Variable_name | Value |
+--------------------------+--------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| collation_connection | utf8mb4_unicode_ci |
| collation_database | utf8mb4_unicode_ci |
| collation_server | utf8mb4_unicode_ci |
+--------------------------+--------------------+
确保您的 /etc/my.conf
具有所有正确的配置:
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci