ERROR 1366(HY000):字符串值不正确:'\ xF0 \ x9F \ x98 \ x9C'表示第1行的“注释”列

时间:2015-12-08 20:35:27

标签: php mysql

这是我的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以适应字符串值。

6 个答案:

答案 0 :(得分:19)

环境中的某些内容未设置为正确处理Unicode文本。

在查询中错误地表示为“ðŸ〜 - ”的字节序列F0 9F 98 9C是Unicode字符“”的UTF8编码,FACE WITH STUCK-OUT TONGUE和WINKING EYE。 (也就是说,它是表情符号。)

要正确存储此字符,您需要确保:

  • 您正在MySQL连接上启用UTF8(即SET NAMES utf8mb4,或者在连接时使用选项同样启用它)。
  • 您正在运行MySQL 5.5或更高版本。
  • 您的表格的字符集为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)

在将数据插入表格之前尝试对其进行编码。

在 PHP 中,您可以使用 utf8_encode() 轻松地对数据进行编码。

要在 PHP 中解码数据,您可以使用 utf8_decode

谢谢!