2017-08-10 4 views
0

私はこの奇妙な問題があります。 Ubuntuのサーバ16.04にインストールMySQLの5.7.18でキャラクタセットと照合が作成テーブルの列定義に表示されない

私はこのような表を作成します。

CREATE TABLE `test` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
`SURNAME` varchar(108) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, 
PRIMARY KEY (`id`), 
KEY `SURNAME` (`SURNAME`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=' (Enc.)' 

しかし、私はこの命令実行した場合:

SHOW CREATE TABLE test; 

を私が表示されません文字セット、およびCREATE TABLE命令で定義した照合順序が含まれます。

明らかに、作成完了後にエラーや警告はありません。

現在、私はUTF8にデータベースと

誰でも、なぜこの行動のを知っているutf8_general_ciする照合の文字セットを設定していますか?そしてもしそうなら、私はこの問題を解決するために何ができますか?

P.S .:この投稿が重複している場合は、私を殺さないでください。

ありがとうございました。

ロレンツォ。

UPDATE

私は別のテストを行いました。 SHOW CREATE TABLEで別の文字セット(utf8_bin)と別の文字セット(utf8)を使用すると、私はそのテーブルの作成に使用した定義を見ることができます。

今、この新しい質問があります。列定義内の文字セットと照合は異なる(例えば、utf8とutf8_bin)ようにする必要がありますか?

もう一度おねがいします。

ロレンツォ。

答えて

0

thisを試しましたか?

CREATE TABLE tbl_name (column_list) 
[[DEFAULT] CHARACTER SET charset_name] 
[COLLATE collation_name]] 

CHARACTER SETです。

これらのうちの1つのみを指定できます。もう1つはデフォルトで設定されています。

+0

こんにちは@Rares Abrudan。ありがとう。しかし、私の問題は、テーブルを作成した後のカラム定義にあります。作成したテーブル(SHOW CREATE TABLE)をチェックすると、CREATE TABLE命令で定義した定義が含まれていません。 – Lorenzo

0

ロレンツォ、

あなたは指定された照合を使用すると、文字セットのデフォルト照合を指定したことに起因する表示されていない理由。各キャラクタセットには、デフォルトの照合が1つあります。 utf8のデフォルトである照合(utf8_general_ci)を指定するために余計な努力をしました。たとえば、指定した照合順序(utf8_unicode_ci)を使用した場合は、SHOWコマンド中に表示されます。

CREATE TEMPORARY TABLE `lang_test` (
`mystr` varchar(16) DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

CREATE TEMPORARY TABLE `lang_test2` (
`mystr` varchar(16) COLLATE utf8_unicode_ci DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci 
関連する問題