4

MySQL 5.5 へのアップグレード後、デフォルトの MySQL サーバー構成で発生した奇妙なバグに気付きました。これはデフォルトとして utf16 照合を使用します (少なくとも私にはそう思われます)。

奇妙な動作は次のとおりです。

次の 2 つのフィールドを持つテーブルを作成します。

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

誰でもこれを確認できますか?

my.cnf で強制的にデフォルトにすることができる UTF8 照合では発生しないようです

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

1 に答える 1

1

それは答えかもしれません(ドキュメントから-Unicodeサポート):

Unicodeを使用してサーバーと通信する必要があるクライアントアプリケーションは、それに応じてクライアント文字セットを設定する必要があります。たとえば、SETNAMES'utf8'ステートメントを発行します。ucs2、utf16、およびutf32は、クライアント文字セットとして使用できません。つまり、SETNAMESまたはSETCHARACTERSETでは機能しません。(セクション10.1.4「接続文字セットと照合」を参照してください。)

そしてもう1つのメモ(接続文字セットと照合から):

ucs2、utf16、およびutf32は、クライアント文字セットとして使用できません。つまり、SETNAMESまたはSETCHARACTERSETでは機能しません。

utf16文字が正しく保存されていないようです。

于 2012-09-20T13:48:37.957 に答える