Mysql四字节汉字支持

yar*_*hyn 8 mysql utf-8

我无法执行此SQL脚本:

INSERT INTO `mabase`.`new_table` (`idnew_table`, `name`) VALUES ('2', '');
Run Code Online (Sandbox Code Playgroud)

错误是:

错误1366:字符串值不正确:第1行的列'name'为'\ xF0\xA0\xBC\xAD'SQL语句:INSERT INTO mabase.new_table(idnew_table,name)VALUES('2','')

我的数据库和表格是在utf8字符集和utf8_general_ci排序规则中.我也试过:utf8_unicode_ci,utf8mb4_general_ci,bg5_cinese_ci,gbk_cinese_ci.

我在Windows上的MySql工作台上尝试了所有这些.

是四字节字符.我只和他们有问题.请告诉我如何在mysql中保存四个字节的字符.

egg*_*yal 10

您想要的角色U + 20F2D位于Unicode的"补充表意平面"的"CJK统一表意文字扩展B"块中,因此在v5.5之前的任何MySQL Unicode字符集中都不可用; 因为V5.5,它在提供utf8mb4,utf16,utf16leutf32字符集.

它不适用于MySQL big5gbk字符集.


为什么utf8编码不起作用

Unicode支持中所述:

Unicode支持的初始实现(在MySQL 4.1中)包括两个用于存储Unicode数据的字符集:

  • ucs2,Unicode字符集的UCS-2编码,每个字符使用16位.

  • utf8,Unicode字符集的UTF-8编码,每个字符使用一到三个字节.

这两个字符集支持Unicode 3.0版的基本多语言平面(BMP)中的字符.BMP字符具有以下特征:

  • 它们的代码值介于0到65535之间(或U+0000.. U+FFFF).

  • 它们可以使用固定的16位字进行编码,如ucs2.

  • 它们可以用8,16或24位编码,如utf8.

  • 它们足以满足主要语言中的几乎所有角色.

上述字符集不支持的字符包括位于BMP之外的补充字符.BMP之外的字符比较为REPLACEMENT CHARACTER,并'?'在转换为Unicode字符集时转换为.

在MySQL 5.6中,Unicode支持包括补充字符,这需要具有更宽范围的新字符集,因此需要更多空间.下表显示了先前和当前Unicode支持的简要功能比较.

???????????????????????????????????????????????????????????????????????????????
?       Before MySQL 5.5       ?              MySQL 5.5 and up                ?
???????????????????????????????????????????????????????????????????????????????
? All Unicode 3.0 characters   ? All Unicode 5.0 and 6.0 characters           ?
???????????????????????????????????????????????????????????????????????????????
? No supplementary characters  ? With supplementary characters                ?
???????????????????????????????????????????????????????????????????????????????
? ucs2 character set, BMP only ? No change                                    ?
???????????????????????????????????????????????????????????????????????????????
? utf8 character set for up to ? No change                                    ?
? three bytes, BMP only        ?                                              ?
???????????????????????????????????????????????????????????????????????????????
?                              ? New utf8mb4 character set for up to four     ?
?                              ? bytes, BMP or supplemental                   ?
???????????????????????????????????????????????????????????????????????????????
?                              ? New utf16 character set, BMP or supplemental ?
???????????????????????????????????????????????????????????????????????????????
?                              ? New utf16le character set, BMP or            ?
?                              ? supplemental (5.6.1 and up)                  ?
???????????????????????????????????????????????????????????????????????????????
?                              ? New utf32 character set, BMP or supplemental ?
???????????????????????????????????????????????????????????????????????????????

这些变化向上兼容.如果要使用新的字符集,则应用程序可能存在不兼容问题; 请参见第10.1.11节"从上一级升级到当前Unicode支持".该部分还描述了如何将表转换utf8为(4字节)utf8mb4字符集,以及在执行此操作时可能适用的约束.

为什么big5编码不起作用

正如记录在使用Big5中文字符集时我应该注意哪些问题?:

MySQL支持Big5字符集,这在香港和台湾(中华民国)很常见.MySQL big5实际上是Microsoft代码页950,它与原始big5字符集非常相似.

[ deletia ]

HKSCS已提交添加扩展的功能请求.需要此扩展程序的用户可能会发现Bug#13577建议的修补程序很有用.

为什么gbk编码不起作用

正如在MySQL中可用的哪些CJK字符集中所述?:

在这里,我们试图准确地澄清哪些字符是合法的,gb2312gbk参考官方文件.请在报告gb2312gbk错误之前检查这些参考.