起因:
使用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的參數屬性值,只會對下次新創建的庫、表有影響。
原先是什麼樣他還是那樣
)