错误 1366 (HY000):不正确的字符串值:第 1 行的“comment”列的“\\xF0\\x9F\\x98\\x9C”

新手上路,请多包涵

这是我的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 的输出:

错误 1366 (HY000):不正确的字符串值:第 1 行的“comment”列的“\xF0\x9F\x98\x9C”

不太确定如何解决这个问题。可能过滤评论文本 using php 以容纳字符串值。

原文由 somejkuser 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 310
2 个回答

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

字节序列 F0 9F 98 9C 在您的查询中错误地表示为“ðŸ∼œ”,是 Unicode 字符“😜”的 UTF8 编码,“吐舌头和眨眼的脸”。 (也就是说,它是一个表情符号字符。)

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

  • 您正在 MySQL 连接上启用 UTF8(即 SET NAMES utf8mb4 ,或在连接时使用类似启用它的选项)。
  • 您正在运行 MySQL 5.5 或更高版本。
  • 你的表的字符集是 utf8mb4

原文由 user149341 发布,翻译遵循 CC BY-SA 3.0 许可协议

将与 mysql 的连接从“SET NAMES utf8”更改为“SET NAMES 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;

原文由 Sujay Kumar 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏