2017-06-14 3 views
0

Ist es möglich, ein Emoji in einem mysql-Trigger zu verwenden?Verwenden Sie ein Emoji in einem MySQL-Trigger

Derzeit, wenn ich den Auslöser mit dem Emoji darin speichern, ändert sich der Emoji zu einem?

Meine Tabelle ist charset = utf8mb4 COLLATE = utf8mb4_bin

/*!50003 SET SESSION SQL_MODE="NO_ENGINE_SUBSTITUTION" */;; 
/*!50003 CREATE */ /*!50017 DEFINER=`dbadmin`@`%` */ /*!50003 TRIGGER `push`  AFTER UPDATE ON `users` FOR EACH ROW BEGIN 
IF (NEW.deviceToken != OLD.deviceToken) THEN 
INSERT INTO pushqueue (deviceToken, message) 
SELECT NEW.deviceToken, "Thank you for downloading. ? "; 
END IF; 
END */;; 
DELIMITER ; 
+1

Können Sie einen minimalistischen Code bereitstellen, der für Sie nicht funktioniert? – gaborsch

+0

Code zum ursprünglichen Beitrag hinzugefügt – JEMA

+0

Haben Sie versucht, das Zeichen als Unicode einzufügen? Auch wenn der Speicher korrekt ist, können Sie Informationen auf dem Ausgabekanal verlieren. Überprüfen Sie Ihre Verbindungseinstellungen, Ihre App-Konventionen usw. – gaborsch

Antwort

0

Von MySQL Kommandozeile DEFAULT ich den Fehler nicht reproduzieren können:

mysql> SELECT VERSION(); 
+-----------+ 
| VERSION() | 
+-----------+ 
| 5.7.18 | 
+-----------+ 
1 row in set (0.00 sec) 

mysql> SET NAMES utf8mb4; 
Query OK, 0 rows affected (0.00 sec) 

mysql> DROP TABLE IF EXISTS `pushqueue`, `users`; 
Query OK, 0 rows affected (0.00 sec) 

mysql> CREATE TABLE IF NOT EXISTS `users` (
    -> `deviceToken` BIGINT UNSIGNED DEFAULT NULL 
    ->) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 
Query OK, 0 rows affected (0.00 sec) 

mysql> CREATE TABLE IF NOT EXISTS `pushqueue` (
    -> `deviceToken` BIGINT UNSIGNED DEFAULT NULL, 
    -> `message` VARCHAR(100) DEFAULT NULL 
    ->) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 
Query OK, 0 rows affected (0.00 sec) 

mysql> DELIMITER // 

mysql> CREATE TRIGGER `push` AFTER UPDATE ON `users` 
    -> FOR EACH ROW 
    -> BEGIN 
    -> IF (NEW.`deviceToken` != OLD.`deviceToken`) THEN 
    ->  INSERT INTO `pushqueue` (`deviceToken`, `message`) 
    ->  SELECT NEW.`deviceToken`, 'Thank you for downloading. '; 
    -> END IF; 
    -> END// 
Query OK, 0 rows affected, 1 warning (0.00 sec) 

mysql> SHOW WARNINGS// 
+---------+------+-----------------------------------------------+ 
| Level | Code | Message          | 
+---------+------+-----------------------------------------------+ 
| Warning | 1300 | Invalid utf8mb4 character string: 'Thank ...' | 
+---------+------+-----------------------------------------------+ 
1 row in set (0.00 sec) 

mysql> DELIMITER ; 

mysql> INSERT INTO `users` (`deviceToken`) 
    -> VALUES (UUID_SHORT()); 
Query OK, 1 row affected (0.00 sec) 

mysql> SELECT `deviceToken` INTO @`deviceToken` 
    -> FROM `users`; 
Query OK, 1 row affected (0.00 sec) 

mysql> SELECT @`deviceToken`; 
+-------------------+ 
| @`deviceToken` | 
+-------------------+ 
| 25124118424715283 | 
+-------------------+ 
1 row in set (0.00 sec) 

mysql> UPDATE `users` SET `deviceToken` = UUID_SHORT() 
    -> WHERE `deviceToken` = @`deviceToken`; 
Query OK, 1 row affected (0.01 sec) 
Rows matched: 1 Changed: 1 Warnings: 0 

mysql> SELECT `deviceToken` 
    -> FROM `users`; 
+-------------------+ 
| deviceToken  | 
+-------------------+ 
| 25124118424715284 | 
+-------------------+ 
1 row in set (0.00 sec) 

mysql> SELECT `deviceToken`, `message` 
    -> FROM `pushqueue`; 
+-------------------+---------------------------------+ 
| deviceToken  | message       | 
+-------------------+---------------------------------+ 
| 25124118424715284 | Thank you for downloading.  | 
+-------------------+---------------------------------+ 
1 row in set (0.00 sec) 

db-fiddle See.