Sample Header Ad - 728x90

How can I insert smiley faces into MySQL ( 😊 )

21 votes
3 answers
55919 views
I'm on MySQL 5.5.21, and trying to insert the '\xF0\x9F\x98\x8A' smiley face character. But for the life of me, I can't figure out how to do it. According to various forums which I've been reading, it is possible. But whenever I try it, the data just gets truncated. mysql> INSERT INTO hour ( title, content, guid , published , lang , type , indegree , lon , lat , state , country , hour ) VALUES ( "title" , "content 😊 content" , "guid" , 1, 1, "WEBLOG", 1, 1, 1, "state" , "country" , 1 ); Query OK, 1 row affected, 2 warnings (0.00 sec) mysql> show warnings; +---------+------+-------------------------------------------------------------------------------+ | Level | Code | Message | +---------+------+-------------------------------------------------------------------------------+ | Warning | 1366 | Incorrect string value: '\xF0\x9F\x98\x8A ...' for column 'content' at row 1 | | Warning | 1265 | Data truncated for column 'published' at row 1 | +---------+------+-------------------------------------------------------------------------------+ 2 rows in set (0.00 sec) mysql> select LAST_INSERT_ID(); +------------------+ | LAST_INSERT_ID() | +------------------+ | 687302 | +------------------+ 1 row in set (0.00 sec) mysql> select * from hour where id = 687302; +--------+-------+----------+------+---------------------+ | id | title | content | guid | published | +--------+-------+----------+------+---------------------+ | 687302 | title | content | guid | 0000-00-00 00:00:00 | +--------+-------+----------+------+---------------------+ 1 row in set (0.00 sec) But my table definition is as follows. CREATE TABLE hour ( id bigint(20) NOT NULL AUTO_INCREMENT, title varchar(255) CHARACTER SET utf8 NOT NULL, content text CHARACTER SET utf8 NOT NULL, guid varchar(255) CHARACTER SET utf8 NOT NULL, published timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, lang tinyint(3) unsigned NOT NULL, type enum('WEBLOG','MICROBLOG') CHARACTER SET utf8 DEFAULT NULL, indegree int(4) unsigned NOT NULL, lon float DEFAULT NULL, lat float DEFAULT NULL, state varchar(50) CHARACTER SET utf8 DEFAULT '', country varchar(50) CHARACTER SET utf8 DEFAULT '', hour int(2) DEFAULT NULL, gender enum('MALE','FEMALE') CHARACTER SET utf8 DEFAULT NULL, time_zone varchar(45) CHARACTER SET utf8 DEFAULT NULL, PRIMARY KEY (id) ) ENGINE=MEMORY AUTO_INCREMENT=687560 DEFAULT CHARSET=utf8mb4 KEY_BLOCK_SIZE=288 One can see that I'm using CHARSET=utf8mb4. Surely this corrects issues around the use of multi-byte characters? Ok, so I didn't notice: content text CHARACTER SET utf8 NOT NULL, I've corrected that now, but still get funky results. CREATE TABLE hourtmp ( id bigint(20) NOT NULL AUTO_INCREMENT, title varchar(255) CHARACTER SET utf8 NOT NULL, content text NOT NULL, guid varchar(255) CHARACTER SET utf8 NOT NULL, published timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, lang tinyint(3) unsigned NOT NULL, type enum('WEBLOG','MICROBLOG') CHARACTER SET utf8 DEFAULT NULL, indegree int(4) unsigned NOT NULL, lon float DEFAULT NULL, lat float DEFAULT NULL, state varchar(50) CHARACTER SET utf8 DEFAULT '', country varchar(50) CHARACTER SET utf8 DEFAULT '', hour int(2) DEFAULT NULL, gender enum('MALE','FEMALE') CHARACTER SET utf8 DEFAULT NULL, time_zone varchar(45) CHARACTER SET utf8 DEFAULT NULL, PRIMARY KEY (id) ) ENGINE=MEMORY AUTO_INCREMENT=687563 DEFAULT CHARSET=utf8mb4 KEY_BLOCK_SIZE=288 | mysql> INSERT INTO hourtmp ( title, content, guid , published , lang , type , indegree , lon , lat , state , country , hour ) VALUES ( "title" , "content 😊 content" , "guid" , 1, 1, "WEBLOG", 1, 1, 1, "state" , "country" , 1 ); Query OK, 1 row affected, 2 warnings (0.00 sec) mysql> show warnings; | Level | Code | Message | | Warning | 1366 | Incorrect string value: '\xF0\x9F\x98\x8A ...' for column 'content' at row 1 | | Warning | 1265 | Data truncated for column 'published' at row 1 | 2 rows in set (0.00 sec) mysql> select * from hourtmp; +--------+-------+-----------------------+ | id | title | content | +--------+-------+-----------------------+ | 687560 | title | content ???? content | | 687561 | title | content ???? content | +--------+-------+-----------------------+
Asked by Bryan Hunt (313 rep)
Jul 11, 2012, 10:27 AM
Last activity: Feb 29, 2024, 10:11 AM