標籤:
最近看了一下KIGG架構,發現在用EF + MYSQL資料庫時,資料出現了亂碼,用工具(Navicat )查看一下表category的結構發現 KIGG 資料庫的預設情況是用latin1編碼的(DEFAULT CHARSET=latin1), 如下:
CREATE TABLE `category` ( `Id` binary(16) NOT NULL, `UniqueName` varchar(64) NOT NULL,
`Name` varchar(64) NOT NULL,
`CreatedAt` datetime NOT NULL,
PRIMARY KEY (`Id`),
KEY `IX_Category_UniqueName_CreatedAt` (`UniqueName`,`CreatedAt`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
我把表的編碼格式改成 utf8. 查看錶category 發現表的DDL 變成了,
CREATE TABLE `category` (
`Id` binary(16) NOT NULL,
`UniqueName` varchar(64) character set latin1 NOT NULL,
`Name` varchar(64) character set latin1 NOT NULL,
`CreatedAt` datetime NOT NULL,
PRIMARY KEY (`Id`),
KEY `IX_Category_UniqueName_CreatedAt` (`UniqueName`,`CreatedAt`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
發現在原來的表中之前定義的列(欄位)的編碼類別型不會因為表的編碼格式而變化,還是latin1(拉丁文格式), 但建立列的類型為是UTF8格式的。由此可見MYSQL中的資料編碼格式已經粒子化到 單位“列”。 在建 資料庫的時候可以指定資料庫編碼格式,在這之後所建的表和列的編碼格式都會以此格式為預設格式。若之後想改資料庫的編碼格式的話,想要把之前的表和列的編碼格式都改過來的話就要一一改過來了。所以,我們要使不擔心資料庫的編碼格式,只要在 MYSQL的安裝目錄下面X:\Program File\MySQL5 下面找到一個my.ini 檔案,用記事本開啟找到
default-character-set=你要設定的編碼格式 。修改其格式即可。在後面建庫,建表,建欄位就不要做其它的設定,除非你要特別要求。
KIGG例子中 EF + MYSQL 的亂碼原因是因為程式提交給資料庫是檔案是UTF8格式的但資料庫中欄位接收的格式卻是latin1 格式的,所以只要將列改為UTF8格式即可。
總結:對於慣用微軟的的SQLSERVER 的使用者來說很少觀注資料庫資料的編碼格式,因為微軟已經幫使用者做完了那些邊角的工作,所以使我們忽略很多重要的事。在用MYSQL中要注意 其中的資料庫,表,列 對應的編碼格式沒有內含項目關聯性,最終決定內容以什麼編碼格式儲存下來還是 定義列時指定的編碼(`Name` varchar(64) character set latin1 NOT NULL,),在建庫和表時設定編碼格式只是相當與為自己的下一級設定預設編碼格式。
http://www.cnblogs.com/seebook/archive/2010/11/06/1870649.html
1.修改資料庫的編碼
將資料庫(test)的編碼方式修改為utf8,如:
ALTER DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
2.修改表的編碼
將表(test)的編碼方式修改為utf8,如:
ALTER TABLE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
3.修改欄位的編碼
將表(test)中欄位(name)的編碼方式修改為utf8,如:
ALTER TABLE `test` CHANGE `name` `name` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL;
http://www.cnblogs.com/linuxer/archive/2012/09/24/2870515.html
mysql資料庫修改資料庫編碼,欄位編碼與表編碼(轉)