【问题标题】:Use an emoji in a MySQL trigger在 MySQL 触发器中使用表情符号
【发布时间】:2017-11-17 01:55:44
【问题描述】:

是否可以在 mysql 触发器中使用表情符号?

目前,当我保存带有表情符号的触发器时,表情符号会变为?

我的表设置为 DEFAULT 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 ;

【问题讨论】:

  • 你能提供一个不适合你的简约代码吗?
  • 在原帖中添加了代码
  • 您是否尝试将字符作为 unicode 插入?此外,即使存储正确,您也可能会丢失输出通道上的信息。检查您的连接设置、您的应用程序编码等。
  • 同意@GaborSch。这可能与客户端有关,与 DB 编码无关。

标签: mysql emoji


【解决方案1】:

从 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    相关资源
    最近更新 更多