2017-06-14 47 views
0

是否可以在mysql觸發器中使用表情符號?在MySQL觸發器中使用表情符號

目前,當我用表情符號保存觸發器時,表情符號變爲?

我的表被設置爲默認字符集= 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

你能提供一個不適合你的簡約代碼嗎? – gaborsch

+0

在原文中加入了代碼 – JEMA

+0

您是否試圖將該字符作爲unicode插入?此外,即使存儲是正確的,您可能會丟失輸出通道上的信息。檢查您的連接設置,您的應用程序連接等。 – gaborsch

回答

0

從MySQL命令行中我不能重現錯誤:

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