这是我的sql:
INSERT INTO comments (createdate,userid,profileid,comment,status)
VALUES (1449503167,65704,65704,'@Mr_S66 Wish I was There For The Xmas Party I Miss My Studio 66 Family 😜',15)
这是我的评论架构:
+------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+----------------+
| commentid | int(11) | NO | PRI | NULL | auto_increment |
| parentid | int(11) | YES | | 0 | |
| refno | int(11) | YES | | 0 | |
| createdate | int(11) | YES | | 0 | |
| remoteip | varchar(80) | YES | | | |
| locid | int(11) | YES | MUL | 0 | |
| clubid | int(11) | YES | | 0 | |
| profileid | int(11) | YES | MUL | 0 | |
| userid | int(11) | YES | MUL | 0 | |
| legacyuser | int(11) | YES | MUL | 0 | |
| mediaid | int(11) | YES | | 0 | |
| status | int(11) | YES | | 1 | |
| comment | varchar(4000) | YES | | | |
| likes | int(11) | YES | | 0 | |
| dislikes | int(11) | YES | | 0 | |
| import | int(11) | YES | | 0 | |
| author | varchar(50) | YES | | | |
+------------+---------------+------+-----+---------+----------------+
继承我sql query
的输出:
ERROR 1366(HY000):字符串值不正确:'\ xF0 \ x9F \ x98 \ x9C'代表第1行的“评论”
还不太清楚如何解决这个问题。可能会过滤评论文本using php
以适应字符串值。
答案 0 :(得分:19)
环境中的某些内容未设置为正确处理Unicode文本。
在查询中错误地表示为“ðŸ〜 - ”的字节序列F0 9F 98 9C
是Unicode字符“”的UTF8编码,FACE WITH STUCK-OUT TONGUE和WINKING EYE。 (也就是说,它是表情符号。)
要正确存储此字符,您需要确保:
SET NAMES utf8mb4
,或者在连接时使用选项同样启用它)。utf8mb4
。答案 1 :(得分:3)
从SET NAMES utf8更改到mysql的连接到SET NAMES utf8mb4
答案 2 :(得分:2)
从" SET NAMES utf8"更改与mysql的连接to"设置名称utf8mb4"
在PHP中,使用mysqli_set_charset添加字符集, https://www.w3schools.com/php/func_mysqli_set_charset.asp
$conn = mysqli_connect("localhost","my_user","my_password","my_db");
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
// Change character set to utf8
mysqli_set_charset($conn, ”utf8mb4”);
或者如果你在NodeJS,(这是额外的信息,以防万一)
db_config = {
host: "localhost",
user: "user",
password: "password",
database: "mydb",
charset: "utf8mb4_unicode_ci"
}
var conn = mysql.createConnection(db_config)
另外,请确保表格的列和表格本身具有相同的uf8mb4编码。
ALTER TABLE my_table CONVERT TO CHARACTER SET utf8mb4;
ALTER TABLE my_table
CHANGE COLUMN my_column my_column TEXT
CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
答案 3 :(得分:1)
要保存表情符号,必须将数据字段设置为utf8m4b,因为mysql utf8只使用3个字节来存储字符。在https://stackoverflow.com/a/36274546/3792270
检查我的解决方案答案 4 :(得分:0)
如果在mysql shell中没有任何效果,请尝试更改mysqld.cnf中的某些设置
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
原始答案MySQL utf8mb4, Errors when saving Emojis 归功于:user3624198
答案 5 :(得分:0)