Linux中mysql5.7修改character_ set_ database爲utf8

起因:

使用mysql,在表中插入中文字符的時候報錯。原因是表的charset是latin1,不支持中文。將charset改成utf8就可以插入中文字符。

他默認建表的時候使用的編碼是latin1,於是想修改其默認character_ set_ database爲utf8。在網上找了很多資料。最終有篇博客解決此問題。https://www.cnblogs.com/007sx/p/5965644.html

上邊鏈接博客是的windows上修改的是my.ini ; 筆者修改的是/etc/my.cnf ,裏面的參數內容是相通的。

網上有的博客說mysql5.7對此選項有BUG 、建議升級到8.0.。

個人感覺這裏的character_ set_ database與默認項 、 庫 、表都有所關聯。

情況如下:

 

1、修改完my.cnf配置重啓

2、 登錄,查看character 屬性,此時是utf8

3、創建表D ,隨後查看錶D屬性,發現是latin1  !?

4、再次查看character屬性,md 怎麼變回latin1了

在這裏就不是很理解爲什麼原先的utf8會變成latin1 。

 

最終

使用show create database HA; 發現庫HA的charset是latin1,在他裏面創建的表都會變成latin1.

於是創建了個新database叫HB,

原先HA是 latin1,他下面的表,就算默認調整爲utf8.下次創建 他還是latin。感覺有點像繼承的關係

HB是我剛纔新建的,由於my.cnf設置默認是utf8  ,他創建是utf8 。 HB下面的表 隨後創建也是utf8 。

感覺是要表和庫的charset要一致纔行得通。

 

修改語句:

create database testB character set utf8;
alter database testB default character set utf8;

 

 

=====================分割線=========================

在此之後繼續做了測試,明白 utf8 爲什麼會變 latin1了。 其實兩者並沒有關聯。

剛登進mysql,此時使用show variables like 'character%';, 此時顯示的可能是系統某個表的字符集。

隨後 use HA; 切換到HA庫,他原先是latin1,建表後,所以再次使用show variables like 'character%'; ,他展示的是latin1.這是沒問題的。

 

所以 改了 my.cnf後,還要看database庫本身的charset 。 否則建的表跟庫的charset是“綁定”的

(

修改my.cnf後,他不會影響原先的database的參數屬性值,只會對下次新創建的庫、表有影響。

原先是什麼樣他還是那樣

)

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章