6

有没有办法在 MySQL 中指定 Unicode 字符文字?

我想用 Ascii 字符替换 Unicode 字符,如下所示:

Update MyTbl Set MyFld = Replace(MyFld, "ẏ", "y")

但是我使用了大多数字体中没有的更晦涩的字符,所以我希望能够使用 Unicode 字符文字,比如

Update MyTbl Set MyFld = Replace(MyFld, "\u1e8f", "y")

这条 SQL 语句是从 PHP 脚本调用的——第一种形式不仅不可读,而且实际上不起作用!

4

5 回答 5

5

您可以使用、或指定十六进制文字(甚至二进制文字):0xx''X''

select  0xC2A2;
select x'C2A2';
select X'C2A2';

但请注意,返回类型是二进制字符串,因此每个字节都被视为一个字符。您可以通过以下方式验证这一点char_length

select char_length(0xC2A2)

2

如果您想要UTF-8字符串,则需要使用convert

select convert(0xC2A2 using utf8mb4)

我们可以看到它C2 A2被认为是 UTF-8 中的 1 个字符:

select char_length(convert(0xC2A2 using utf8mb4))

1


此外,您不必担心无效字节,因为convert会自动删除它们:

select char_length(convert(0xC1A2 using utf8mb4))

0

可以看出,输出是0因为C1 A2是无效的 UTF-8 字节序列。

于 2015-01-26T17:41:21.143 回答
3

您可以使用hexandunhex函数,例如:

update mytable set myfield = unhex(replace(hex(myfield),'C383','C3'))
于 2010-11-23T14:02:35.490 回答
3

感谢您的建议,但我认为问题出在系统中。

有很多级别要取消,但据我所知,(至少在此服务器上)命令

set names utf8

使 utf-8 处理正常工作,而

set character set utf8

没有。

在我的环境中,这些是使用 PDO 从 PHP 调用的,这可能会产生什么不同。

不管怎么说,还是要谢谢你!

于 2010-11-29T18:43:50.080 回答
0

此处指定了 MySQL 字符串语法,如您所见,没有提供数字转义序列。

但是,当您在 PHP 中嵌入 SQL 时,您可以在 PHP 中计算正确的字节。确保您放入 SQL 的字节实际上与您的客户端字符集匹配。

于 2010-11-23T14:00:15.360 回答
0

还有一个char功能可以满足您的需求(提供字节数和字符集名称)并获取字符。

于 2011-03-10T13:04:21.277 回答