8

我无法执行此 SQL 脚本:

INSERT INTO `mabase`.`new_table` (`idnew_table`, `name`) VALUES ('2', '');

错误是:

错误 1366: 不正确的字符串值: '\xF0\xA0\xBC\xAD' for column 'name' at row 1 SQL 语句: INSERT INTO mabasenew_table( idnew_table, name) 值 ('2', '')

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

我已经在 Windows 上的 MySql 工作台中尝试了所有这些。

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

4

2 回答 2

11

您想要的字符U+20F2D位于 Unicode 的“Supplementary Ideographic Plane”的“CJK Unified Ideographs Extension B”块中,因此在 v5.5 之前的任何 MySQL Unicode 字符集中都不可用;从 v5.5 开始,它在utf8mb4utf16和字符集中可用。utf16leutf32

big5它在 MySQL或gbk字符集中不可用。


为什么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 之外的字符作为替换字符进行比较,并'?'在转换为 Unicode 字符集时转换为。

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

╔══════════════════════════════╦══════════════════ ════════════════════════════╗
║        MySQL 5.5 之前MySQL 5.5 及更高                版本 ║
╠══════════════════════════════╬══════════════════ ════════════════════════════╣
║ 所有 Unicode 3.0 字符 ║ 所有 Unicode 5.0 和 6.0 字符 ║
╠══════════════════════════════╬══════════════════ ════════════════════════════╣
║ 无补字 ║ 有补字 ║
╠══════════════════════════════╬══════════════════ ════════════════════════════╣
║ ucs2字符集,仅 BMP ║ 无变化 ║
╠══════════════════════════════╬══════════════════ ════════════════════════════╣
║utf8字符集最多║不变
║ 三个字节,仅 BMP ║ ║
╠══════════════════════════════╬══════════════════ ════════════════════════════╣
║║新的utf8mb4字符集最多四个║
║ ║ 字节,BMP 或补充 ║
╠══════════════════════════════╬══════════════════ ════════════════════════════╣
║║新的utf16字符集,BMP或补充║
╠══════════════════════════════╬══════════════════ ════════════════════════════╣
║ ║ 新的utf16le字符集,BMP 或 ║
║ ║ 补充(5.6.1 及更高版本)║
╠══════════════════════════════╬══════════════════ ════════════════════════════╣
║ ║新的utf32字符集,BMP 或补充 ║
╚══════════════════════════════╩══════════════════ ════════════════════════════╝

这些变化是向上兼容的。如果您想使用新的字符集,您的应用程序可能会出现不兼容问题;请参阅第 10.1.11 节,“从以前的 Unicode 支持升级到当前的 Unicode 支持”</a>。该部分还描述了如何将表从utf8(4 字节)utf8mb4字符集转换,以及这样做可能会应用哪些约束。

为什么big5编码不起作用

使用 Big5 中文字符集时应该注意哪些问题?

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

[删除]

HKSCS已提交添加扩展的功能请求。需要此扩展的人可能会发现建议的 Bug #13577 补丁感兴趣。

为什么gbk编码不起作用

MySQL 中有哪些 CJK 字符集?

在这里,我们参考官方文档,尝试明确gb2312or中哪些字符是合法的。gbk请在报告gb2312gbk错误之前检查这些参考资料。

  • 完整的gb2312字符列表,按照排序规则gb2312_chinese_ci排序:gb2312

  • MySQLgbk实际上是“Microsoft 代码页 936”。gbk这与字符A1A4(中点)、A1AA(破折号)、A6E0-A6F5和的官方不同A8BB-A8C0

  • 有关gbk/Unicode 映射的列表,请参阅http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP936.TXT

  • 有关 MySQL 的gbk字符列表,请参阅gbk

于 2013-07-16T15:54:15.483 回答
0

这 2 个命令将支持数据库中的中文字符。

ALTER DATABASE CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci'

ALTER TABLE 转换为字符集 DEFAULT COLLATE DEFAULT

简短而简单。

希望能帮助到你

于 2014-12-20T13:55:54.247 回答