2015-12-08 42 views
7

這列 '註釋' 是我的SQL:ERROR 1366(HY000):不正確的字符串值: ' XF0 x9F X98 x9C' 在1行

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以適應字符串值。

+3

什麼是您在MySQL中的整理和字符集設置? – NullUserException

+0

@NullUserException字符集是拉丁文和整理名稱是latin1_swedish_ci數據庫正確,你問? – jkushner

+2

你需要使用utf8。這是一個表情符號; http://www.fileformat.info/info/unicode/char/1f61c/index.htm或者你可以過濾它;可能會更好地擁有所有的字符..這些可能會幫助你http://stackoverflow.com/questions/279170/utf-8-all-the-way-through和http:// stackoverflow。com/questions/20411440/incorrect-string-value-xf0-x9f-x8e-xb6-xf0-x9f-mysql – chris85

回答

15

您的環境中的某些內容未設置爲正確處理Unicode文本。

字節序列F0 9F 98 9C,在您的查詢中被錯誤地表示爲「ðŸ~œ」,是Unicode字符「」的UTF8編碼,FACE WITH STUCK-OUT TONGUE和WINKING EYE。 (也就是說,它是一個表情符號。)

正確地存儲這種性格,你將需要確保:

  • 你是你的MySQL連接上啓用UTF8(即SET NAMES utf8mb4,或者使用連接時選項同樣啓用它)。
  • 您正在運行MySQL 5.5或更高版本。
  • 您餐桌的字符集是utf8mb4
+0

這裏的關鍵是emojis是4字節的UTF8,默認情況下mysql使用3字節的UTF8。 – Sammitch

+0

@Sammitch基於評論,OP甚至沒有使用UTF8;他們提到他們的表字符集目前是latin1。 :( – duskwuff

+0

@Sammitch我把函數'mysqli_set_charset'應用到utf8,我正在努力使表達到4個字節 – jkushner

2

更改連接到MySQL解決方案集名稱utf8mb4

從 「集名UTF8」
0

更改連接到MySQL,以 「集名稱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; 
相關問題