Chr*_*isV 6 mysql unicode literals unicode-literals
有没有办法在MySQL中指定Unicode字符文字?
我想用Ascii字符替换Unicode字符,如下所示:
Update MyTbl Set MyFld = Replace(MyFld, "?", "y")
Run Code Online (Sandbox Code Playgroud)
但是我使用的是大多数字体都没有的更加模糊的字符,所以我希望能够使用Unicode字符文字,比如
Update MyTbl Set MyFld = Replace(MyFld, "\u1e8f", "y")
Run Code Online (Sandbox Code Playgroud)
这个SQL语句是从PHP脚本调用的 - 第一个表单不仅不可读,而且实际上不起作用!
您可以指定十六进制文字(甚至是二进制文字使用)0x,x''或X'':
select 0xC2A2;
select x'C2A2';
select X'C2A2';
Run Code Online (Sandbox Code Playgroud)
但是请注意,返回类型是二进制字符串,因此每个字节都被视为一个字符。您可以使用以下方法进行验证char_length:
select char_length(0xC2A2)
Run Code Online (Sandbox Code Playgroud)
2
select convert(0xC2A2 using utf8mb4)
Run Code Online (Sandbox Code Playgroud)
我们可以看到C2 A2在UTF-8中将其视为1个字符:
select char_length(convert(0xC2A2 using utf8mb4))
Run Code Online (Sandbox Code Playgroud)
1
另外,您不必担心无效字节,因为convert它将自动删除它们:
select char_length(convert(0xC1A2 using utf8mb4))
Run Code Online (Sandbox Code Playgroud)
0
可以看到,输出是0因为C1 A2是无效的UTF-8字节序列。
感谢您的建议,但我认为问题出在系统上。
有很多关卡需要取消,但据我所知,(至少在这个服务器上)命令
set names utf8
Run Code Online (Sandbox Code Playgroud)
使 utf-8 处理正确工作,而
set character set utf8
Run Code Online (Sandbox Code Playgroud)
没有。
在我的环境中,这些是使用 PDO 从 PHP 调用的,这可能会产生什么差异。
不管怎么说,还是要谢谢你!