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

jku*_*ner 13 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)
Run Code Online (Sandbox Code Playgroud)

这是我的评论架构:

    +------------+---------------+------+-----+---------+----------------+
    | 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  |     |         |                |
    +------------+---------------+------+-----+---------+----------------+
Run Code Online (Sandbox Code Playgroud)

继承我的输出sql query:

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

还不太清楚如何解决这个问题.可能会过滤注释文本using php以适应字符串值.

dus*_*uff 23

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

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

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

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

  • `SET NAMES utf8`不会这样做.你需要`SET NAMES utf8mb4`.请参阅:http://stackoverflow.com/q/39095860/1302716 (4认同)

Suj*_*mar 6

将 mysql 连接从“SET NAMES utf8”更改为“SET NAMES utf8mb4”

\n\n

在 PHP 中,使用 mysqli_set_charset 添加字符集,\n https://www.w3schools.com/php/func_mysqli_set_charset.asp

\n\n
$conn = mysqli_connect("localhost","my_user","my_password","my_db");\nif (mysqli_connect_errno()) {\n   echo "Failed to connect to MySQL: " . mysqli_connect_error();\n}\n\n// Change character set to utf8\nmysqli_set_charset($conn, \xe2\x80\x9dutf8mb4\xe2\x80\x9d);\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者如果您使用 NodeJS,(这是额外信息,以防万一)

\n\n
db_config = {  \n    host: "localhost",\n    user: "user",\n    password: "password",    \n    database: "mydb",  \n    charset: "utf8mb4_unicode_ci"\n}\nvar conn = mysql.createConnection(db_config)\n
Run Code Online (Sandbox Code Playgroud)\n\n

另外,请确保表的列和表本身具有相同的 uf8mb4 编码。

\n\n
ALTER TABLE my_table CONVERT TO CHARACTER SET utf8mb4;\n\nALTER TABLE my_table\n   CHANGE COLUMN my_column my_column TEXT\n   CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\n
Run Code Online (Sandbox Code Playgroud)\n