查看所有的编码
show variables like 'character%';
在配置文件 my.ini 中的 [mysqld] 章节下添加 character-set-server = utf8 改变 character_set_server 的编码,需要重启mysql服务生效。
character_set_database 的编码的配置不在配置文件中,使用
alter database databasename character set utf8 collate utf8_general_ci
命令来修改。
不修改 pymysql 的编码参数,在 pymysql.cursors.Cursor 对象进行 execute 查询语句中含有中文时,会报编码错误。
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 32-34: ordinal not in range(256)
con = pymysql.connect(host = local, port = port, user = "root", passwd = "xxxxx", charset = "utf8", use_unicode = True)
cur = con.cursor()
带上关键字参数 chartset 指定为 utf8 即可。
character_set_client | gbkcharacter_set_connection | gbk
character_set_database | utf8
character_set_filesystem | binary
character_set_results | gbk
character_set_server | utf8
character_set_system | utf8
character_sets_dir | H:\Nonstop_db\update\mysql5.5.8\share\charsets\
可能造成乱码的是加黑的 5 种。
set names xxx 只不过是是将character_set_client ,character_set_connection,character_set_results 设置成 xxx 而已。
依次是客户端使用的编码,连接层的编码,查询结果的编码。