解决Mac mysql存入emoji的问题
来源:互联网 发布:阿里云飞天 编辑:程序博客网 时间:2024/05/17 10:40
最近在爬取微信公众号文章的过程中,发现文章中存在emoji时,会报以下错误:
pymysql.err.InternalError: (1366, "Incorrect string value: '\\xF0\\x9F\\x93\\xBD \\xC2...' for column 'article' at row 1")
报错原因:mysql utf-8 编码储存的是 2-3个的字节,而emoji则是4个字节。
在将数据库和数据表的字符集都改为utfmb4之后,发现还是不行参照博文:
原来还要在my.cnf里修改下mysqld的character-set-server,把它改为utf8mb4,然后重启mysqld,就可存入Emoji字符了。
以下是我的修改步骤:
- 进入到 /usr/local/mysql/support-files 目录,发现Mac没有这个my.cnf
- 既然没有,那就在桌面创建一个my.cnf,将以下代码复制其中:
# Example MySQL config file for small systems.## This is for a system with little memory (<= 64M) where MySQL is only used# from time to time and it's important that the mysqld daemon# doesn't use much resources.## MySQL programs look for option files in a set of# locations which depend on the deployment platform.# You can copy this option file to one of those# locations. For information about these locations, see:# http://dev.mysql.com/doc/mysql/en/option-files.html## In this file, you can use all long options that a program supports.# If you want to know which options a program supports, run the program# with the "--help" option.# The following options will be passed to all MySQL clients[client]default-character-set=utf8 # 修改此处默认数据集#password = your_passwordport = 3306socket = /tmp/mysql.sock# Here follows entries for some specific programs# The MySQL server[mysqld]default-storage-engine=INNODBcharacter-set-server=utf8 # 修改此处collation-server=utf8_general_ci # 对应也需要修改port = 3306socket = /tmp/mysql.sockskip-external-lockingkey_buffer_size = 16Kmax_allowed_packet = 1Mtable_open_cache = 4sort_buffer_size = 64Kread_buffer_size = 256Kread_rnd_buffer_size = 256Knet_buffer_length = 2Kthread_stack = 128K# Don't listen on a TCP/IP port at all. This can be a security enhancement,# if all processes that need to connect to mysqld run on the same host.# All interaction with mysqld must be made via Unix sockets or named pipes.# Note that using this option without enabling named pipes on Windows# (using the "enable-named-pipe" option) will render mysqld useless!##skip-networkingserver-id = 1# Uncomment the following if you want to log updates#log-bin=mysql-bin# binary logging format - mixed recommended#binlog_format=mixed# Causes updates to non-transactional engines using statement format to be# written directly to binary log. Before using this option make sure that# there are no dependencies between transactional and non-transactional# tables such as in the statement INSERT INTO t_myisam SELECT * FROM# t_innodb; otherwise, slaves may diverge from the master.#binlog_direct_non_transactional_updates=TRUE# Uncomment the following if you are using InnoDB tables#innodb_data_home_dir = /usr/local/mysql/data#innodb_data_file_path = ibdata1:10M:autoextend#innodb_log_group_home_dir = /usr/local/mysql/data# You can set .._buffer_pool_size up to 50 - 80 %# of RAM but beware of setting memory usage too high#innodb_buffer_pool_size = 16M#innodb_additional_mem_pool_size = 2M# Set .._log_file_size to 25 % of buffer pool size#innodb_log_file_size = 5M#innodb_log_buffer_size = 8M#innodb_flush_log_at_trx_commit = 1#innodb_lock_wait_timeout = 50[mysqldump]quickmax_allowed_packet = 16M[mysql]no-auto-rehash# Remove the next comment character if you are not familiar with SQL#safe-updates[myisamchk]key_buffer_size = 8Msort_buffer_size = 8M[mysqlhotcopy]interactive-timeout
- 将修改后的文件my.cnf复制到 /etc 目录下。
重启mysql
解决了哈哈哈,hooray!
阅读全文