4

升级到 MySQL 5.5 后,我们注意到默认 MySQL 服务器配置上发生的奇怪错误,它使用 utf16 排序规则作为默认值(至少在我看来)

奇怪的行为如下。

使用以下两个字段创建表

CREATE TABLE `aa` (
  `a` ENUM('on','off') NOT NULL DEFAULT 'off',
  `b` ENUM('on','off') NOT NULL DEFAULT 'off'
) CHARACTER SET 'utf16' COLLATE 'utf16_general_ci';

转储表,结构如下

CREATE TABLE `aa` (
  `a` ENUM('o','o') NOT NULL DEFAULT 'o',
  `b` ENUM('o','o') NOT NULL DEFAULT 'o'
)ENGINE=InnoDB
CHARACTER SET 'utf16' COLLATE 'utf16_general_ci';

系统配置

Ubuntu 12.04.1 LTS
Linux host 3.2.0-30-virtual #48-Ubuntu SMP Fri Aug 24 17:12:24 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
mysql-server-5.5 5.5.24-0ubuntu0.12.04.1    MySQL database server binaries and system database setup

任何人都可以证实这一点?

UTF8 排序规则似乎不会发生,这可以强制成为 my.cnf 中的默认值

[mysqld]
character-set-server = utf8
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
4

1 回答 1

1

这可能是一个答案(来自文档 - Unicode Support):

需要使用 Unicode 与服务器通信的客户端应用程序应相应设置客户端字符集;例如,通过发出 SET NAMES 'utf8' 语句。ucs2、utf16 和 utf32 不能用作客户端字符集,这意味着它们不适用于 SET NAMES 或 SET CHARACTER SET。(请参阅第 10.1.4 节,“连接字符集和排序规则”。)

还有一点(来自Connection Character Sets and Collat​​ions):

ucs2、utf16 和 utf32 不能用作客户端字符集,这意味着它们不适用于 SET NAMES 或 SET CHARACTER SET。

看起来 utf16 字符没有正确存储。

于 2012-09-20T13:48:37.957 回答