Ich bin auf MySQL 5.5.21 und versuche, das Smiley-Zeichen '\ xF0 \ x9F \ x98 \ x8A' einzufügen. Aber für das Leben von mir kann ich nicht herausfinden, wie es geht.
Nach verschiedenen Foren, die ich gelesen habe, ist es möglich. Aber wenn ich es versuche, werden die Daten einfach abgeschnitten.
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)
Aber meine Tabellendefinition ist wie folgt.
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
Man kann sehen, dass ich CHARSET = utf8mb4 benutze. Behebt dies sicherlich Probleme bei der Verwendung von Mehrbyte-Zeichen?
Ok, also habe ich nicht bemerkt:
`content` text CHARACTER SET utf8 NOT NULL,
Ich habe das jetzt korrigiert, bekomme aber immer noch irre Ergebnisse.
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 |
+--------+-------+-----------------------+
mysql
character-set
sql-injection
Bryan Hunt
quelle
quelle
uft8
für dasTEXT
Feld angebenAntworten:
Ich habe kürzlich eine ausführliche Anleitung zum Umstieg von MySQL
utf8
auf geschriebenutf8mb4
. Wenn Sie die dortigen Schritte ausführen, sollte alles korrekt funktionieren. Hier sind direkte Links zu jedem einzelnen Schritt des Prozesses:Ich vermute, dass Ihr Problem durch das Befolgen von Schritt 5 gelöst werden kann. Ich hoffe, dies hilft!
quelle
mysql
von Node und muss escharset: 'utf8mb4'
in meinemcreateConnection()
Aufruf angeben . Andernfalls ist das Einfügen von echten UTF8-Zeichen mit demIncorrect string value
Fehler immer noch fehlgeschlagen , auch nachdem die Tabelle und die Spalte inutf8mb4
Zeichensatz und Sortierung konvertiert wurden . Ich gehe davon aus, dass die Details der Client-Konfigurationsebene in Schritt 5 einen ähnlichen Effekt haben werden.Mach die folgenden Dinge:
Stellen Sie den Datenbank-Zeichensatz auf utf8mb4 ein
Setzen Sie den Zeichensatz der Spalte auf utf8mb4
wie unten Abfrage:
quelle