2017-08-10 20 views
0

我有這個奇怪的問題。字符集和整理不會出現在創建表的列定義上

在MySQL 5.7.18安裝在Ubuntu的服務器16.04我創建一個表是這樣的:

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_bin),我可以看到我在創建表的指令中使用的定義。

現在,我有這個新問題。列定義中的字符集和排序規則必須不同(例如,utf8和utf8_bin)纔會出現?

再次感謝。

洛倫佐。

回答

0

你試過this

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

它是CHARACTER SET的名字。

您只能指定其中一個,而另一個默認設置。

+0

Hi @Rares Abrudan。謝謝。但是,我創建表後,我的問題是在列定義。如果我檢查創建的表(SHOW CREATE TABLE),它不包含我在CREATE TABLE指令中定義的定義。 – Lorenzo

0

洛倫佐,

你沒有看到你所指定的整理是由於您指定的字符集的默認排序規則的事實的原因。每個字符集都有一個默認排序規則。你花費了額外的工作來指定排序規則(utf8_general_ci),它是utf8的默認值。例如,如果您指定了排序規則(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 
相關問題