我想在 MySQL 中插入一条具有非 ASCII Unicode 字符的记录,但我在一个不允许我轻松输入非 ASCII 字符的终端上。如何在 MySQL 的 SQL 语法中转义 Unicode 文字?
问问题
7121 次
3 回答
9
请参阅:http ://bugs.mysql.com/bug.php?id= 10199(错误#10199:“允许字符串文字的 Unicode 转义序列。”)自 2005 年以来,此请求已“打开”。更多详细信息请参阅工作日志任务#3529:Unicode 转义序列。
但是,从https://web.archive.org/web/20091117221116/http://eng.kaching.com/2009/10/mysql-unicode-escape-sequences.html ,您可以看到以下示例,实际上似乎可行,但需要您知道实际的逐字节 UTF8 编码:
您还可以使用可变长度的 UTF-8 表示(例如,从 utf-8 URL 编码的值(如 %E2%80%98)复制时很方便)。
mysql> select _utf8 x'E28098'; +---+ | ‘ | +---+
于 2010-09-03T01:32:29.347 回答
2
这个存储函数提供了 MySQL (显然)缺少的功能,可以将文字代码点转换为字符,而无需知道 UTF-8 编码。
如果VARCHAR(1)
看起来很奇怪,因为 MySQL 中的 utf8 字符最长可达 3 个字节,请记住大小VARCHAR
是characters,而不是bytes。该函数从输入值返回单个 UTF-8 编码字符。
对于十六进制文字,前置0x
.
DELIMITER $$
DROP FUNCTION IF EXISTS `utf8_char` $$
CREATE FUNCTION `utf8_char`(v smallint unsigned) RETURNS VARCHAR(1) CHARSET utf8
NO SQL
DETERMINISTIC
BEGIN
-- http://stackoverflow.com/questions/3632410/mysql-unicode-literals/30675371#30675371
RETURN CHAR(CASE
WHEN v <= 0x7F THEN v
WHEN v <= 0x7FF THEN 0xC080 | ((v >> 6) << 8) | (v & 0x3F)
WHEN v <= 0xFFFF THEN 0xE08080 | (((v >> 12) & 0x0F ) << 16) | (((v >> 6) & 0x3F ) << 8) | (v & 0x3F)
ELSE NULL END);
END $$
DELIMITER ;
示例输出:
mysql> select utf8_char(8592) AS 'leftwards_arrow';
+-----------------+
| leftwards_arrow |
+-----------------+
| ← |
+-----------------+
1 row in set (0.00 sec)
mysql> select utf8_char(0x2192) AS 'rightwards_arrow_hex';
+----------------------+
| rightwards_arrow_hex |
+----------------------+
| → |
+----------------------+
1 row in set (0.00 sec)
于 2015-06-05T20:32:24.880 回答
2
于 2019-06-27T14:03:51.593 回答