Mysql四字节汉字支持

时间:2013-07-16 15:04:03

标签: mysql utf-8

我无法执行此SQL脚本:

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

错误是:

  

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

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

我在MySql工作台中尝试了所有这些 在窗户上。

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

2 个答案:

答案 0 :(得分:10)

您想要的角色U+20F2D,位于" CJK统一表意文字扩展B" Unicode"补充表意平面"因此在v5.5之前的任何MySQL Unicode字符集中都没有;自v5.5起,它在utf8mb4utf16utf16leutf32字符集中可用。

在MySQL的big5gbk个字符集中不可用。


为什么utf8编码不起作用

正如Unicode Support所述:

  

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.5MySQL 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 ║
╚══════════════════════════════╩══════════════════════════════════════════════╝
     

这些更改是向上兼容的。如果要使用新的字符集,则应用程序可能存在不兼容问题;见Section 10.1.11, “Upgrading from Previous to Current Unicode Support”。该部分还描述了如何将表从utf8转换为(4字节)utf8mb4字符集,以及可能适用的约束条件。

为什么big5编码不起作用

正如What problems should I be aware of when working with the Big5 Chinese character set?所述:

  

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

[ deletia ]
     

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

为什么gbk编码不起作用

正如What CJK character sets are available in MySQL?所述:

  

在这里,我们尝试使用官方文档明确说明gb2312gbk中哪些字符合法。请在报告gb2312gbk错误之前检查这些参考文献。

     
      
  • 有关gb2312字符的完整列表,请根据gb2312_chinese_ci归类排序:gb2312

  •   
  • MySQL gbk实际上是“Microsoft代码页936”。这与字段gbk(中间点),A1A4(短划线),A1AAA6E0-A6F5的官方A8BB-A8C0不同。

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

  •   
  • 对于MySQL的gbk字符列表,请参阅gbk

  •   

答案 1 :(得分:0)

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

  

ALTER DATABASE CHARACTER SET&#39; utf8&#39; COLLATE   &#39; utf8_unicode_ci&#39;

     

ALTER TABLE转换为字符集DEFAULT COLLATE   DEFAULT

简短而简单。

希望有所帮助