2017-01-22 105 views
0

我正在使用2臺服務器,每臺服務器具有相似的配置,包括特定於字符集和歸類的mysql變量,並且都在運行mysql服務器和客戶端5.6.x.默認情況下,所有表都包括latin1的只有整數列的表,但是當我在每個服務器上運行「轉換爲字符集」不會將只包含整數列的錶轉換爲指定的字符集

ALTER TABLE `table_name` CONVERT TO CHARACTER SET `utf8` COLLATE `utf8_unicode_ci` 

所有表只有一臺服務器將所有的表爲utf8。

我已經嘗試過:

轉換設置爲UTF-8的默認數據庫字符(character_set_database)運行上面列出的命令

解決方案已經爲我工作之前(但仍不能確定爲什麼它的工作)

ALTER TABLE `table_name` CHARACTER SET = `utf8` COLLATE `utf8_unicode_ci` 

最後有2個問題:

  1. CONVERT TO CHARACTER SET是工作在一臺服務器,而不是在其他
  2. 解決方案已經爲我工作的這是一個只有一個區別我也碰到過類似CONVERT TO CHARACTER SET,它不會隱的所有列轉換爲指定的字符集。

有人能幫我理解發生了什麼嗎?

預先感謝您。

+0

您可以發佈您的表架構之前和之後此命令指出問題是什麼?順便說一句,整數沒有字符集。 – Bjoern

+0

我知道Integer沒有字符集。我不知道該模式會如何幫助,因爲我提到了所有整數列 – HBK

+0

沒有'CONVERT'的改變實際上是否改變了任何文本列? –

回答

1

IIRC,這是一個最終被修復的錯誤。請參閱bugs.mysql.com。 (因爲4.1版本,當時真的加入CHARACTER SETs該錯誤可能存在。)

我希望還是明確在兩個地方,從而避免你提出這個問題:

  • 在做CREATE TABLE,我明確地說什麼我需要CHARACTER SET。這可以避免取決於創建數據庫時(可能是幾年前)建立的默認
  • 當添加列(ALTER TABLE ADD COLUMN ...)時,我檢查(通過SHOW CREATE TABLE)查看錶已有是否具有所需的字符集。即便如此,我可能會明確聲明CHARACTER SET爲列。再次,我不相信桌子的歷史。

注意:我從顯式SQL執行這些查詢,而不是從可能「幫助」我的一些UI執行這些查詢。在

@HBK

跟蹤發現http://bugs.mysql.com/bug.php?id=73153。從它,我懷疑這是什麼'應該'由用戶完成:

ALTER TABLE ... 
    CONVERT TO ... 
    DEFAULT CHARACTER SET ...; -- Do this also 
+0

非常感謝你@Rick對你的迴應,並感謝你指點正確的地方。我想mysql漏洞需要更好地在谷歌或任何搜索引擎上編入索引,因爲我們期望他們在查詢時列出mysql頂部的自己的域鏈接,但任何有多少人都無法控制它。 – HBK

+0

而對於其他人來說,這裏是鏈接到Mysql的錯誤報告:http://bugs.mysql.com/bug.php?id=73153 – HBK

+0

Sveta在這裏提供了一個很好的觀點:「如果你想改變默認字符集到這樣的表使用「default charset = utf8;」而不是「convert」「。 –

相關問題