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
Last activity: Feb 29, 2024, 10:11 AM