【发布时间】:2014-02-09 14:34:16
【问题描述】:
我正在尝试在 MySQL 5.1 中选择 unicdode 字符 /u2028。 MySQL 5.1 确实支持 utf8 和 ucs2。
在较新版本的 MySQL 中,我可以选择使用 utf16 或 utf32 排序规则的字符:
SELECT char(0x2028 using utf16);
SELECT char(0x00002028 using utf32);
但是 MySQL 5.1 不支持 utf16 和 utf32。那我怎么能选择unicode字符呢?
也许是关于我的用例的几句话:我有一个第三方应用程序,它将数据存储在 mysql 数据库中并使用 JavaScript 作为用户界面。应用程序不处理问题 unicode 字符 /u2028 和 /u2029 是有效的 JSON,但会破坏 JavaScript 代码。 (详情见http://timelessrepo.com/json-isnt-a-javascript-subset)所以我想知道有多少数据受到这个问题的影响,也许可以在MySQL上使用replace来修复它。
演示问题:
CREATE TABLE IF NOT EXISTS `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`string` varchar(100) CHARACTER SET utf8 NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
INSERT INTO `test` (`id`, `string`) VALUES
(1, 'without U+2028'),
(2, 'with U+2028 at this "
"point');
SELECT * FROM test WHERE string LIKE CONCAT("%", char(0x2028 using utf16), "%");
// returns row 2 as expected
SELECT * FROM test WHERE string LIKE CONCAT("%", char(??? using utf8), "%");
// U+2028 in utf8 is 0xE2 0x80 0xA8 isn't it?
// But how to parse this to char function?
【问题讨论】:
-
不太确定是什么问题。 U+2028 是 MySQL 中
utf8编码完美支持的字符。但是,CHAR函数及其参数有些不同。为什么您想将文字0x2028转换为 UTF-8 编码的 U+2028 Unicode 字符?这真的是您要解决的问题吗? -
U+2028 LINE SEPARATOR 很少使用。你确定你需要处理它吗?它可能会导致 JavaScript 出现问题,但这与 MySQL 有什么关系?
-
@JukkaK.Korpela 正如我在用例中所写的那样,我必须处理 U+2028 和 U+2029 只是因为它们在 JavaScript 中引起的问题。由于前端的 JavaScript 问题,我需要删除第三方应用程序的 MySQL 数据库的这些字符。
-
@deceze:我在问题中添加了问题的演示。最后,我喜欢为所有 U+2028 和 U+2029 字符编写一个查找和替换查询。
-
2028 年我或多或少有同样的问题。对任何解决方案都感兴趣。