完美解決mysql儲存中文出現1366錯誤
最近在使用sqlalchemy將中文存放至mysql資料庫的表中時出現:
Warning Code :1366 Incorrect string value: '\xE5\x9C\xA8' for column 'content' at row 1
這是因為我們存放的中文,而我們的表並不支援中文字符集,使用 show variables like 'character%'; 檢視mysql當前編碼:
可以看出database和server的字符集使用的是latin1,latin1是不支援中文的,導致存放中文錯誤。
我嘗試了兩種方法來避免中文存放錯誤問題:
1:設定server和database為utf8型別
使用以下命令來設定在命令列輸入:
show variables like '%char%';
set character_set_server=utf8;
set character_set_database=utf8;
一般使用上面的命令就可以了,如果還不行,show create table 表名;,看看具體的column是不是字符集不對。
2:建表時設定預設字符集
我在建表時一般會在sql語句中設定預設字符集為utf8,來避免一些問題:
sql='''create table analysis(city varchar(20),companySize varchar(20),education varchar(20))default charset=utf8'''
在末尾新增default charset=utf8,來設定就好了,如果還需要設定其他的引數,也可以直接在sql語句的末尾新增。
★★★★★溫馨提示:
這是個人遇到的一個問題,這裡說一下:在使用sql語句時,有些單詞、字母是特殊字元類似於python中的class、import等,所以如果要使用這樣的關鍵字,需要給它加上``,例如`index`,這裡的index就屬於關鍵字,若是直接使用,則會報錯。所以需要特別注意,我在使用時老是出錯,就是找不到問題,還以為其他錯誤,還好突然想起了資料庫老師偶然提到的這個問題。