mysql 连接 utf8

阅读: 评论:0

mysql 连接 utf8

mysql 连接 utf8

最近惊奇地发现MySQL的默认编码方式居然是Latin1!而不是utf8!

于是即使我用的不是Windows,还是碰上了久违的编码问题……

错误是传入utf8字符(这里特指中文字符)后,MySQL报错说“奇怪的字符串,,不认识啊”。利用Python的decode,可以把这串报错字符还原成原本的utf8字符串。可见应该是MySQL的问题。

上网搜一下,得出是character变量设置的问题。这时候的character相关变量设定如下:

mysql> show variables like 'character%';

+--------------------------+---------------------+

| Variable_name | Value |

+--------------------------+---------------------+

| character_set_client | utf8 |

| character_set_connection | utf8 |

| character_set_database | latin1 |

| character_set_filesystem | binary |

| character_set_result | utf8 |

| character_set_server | latin1 |

| character_set_system | utf8 |

看来得把那两项latin1也同化成utf8才行。接着继续查资料。

看了下官方的相关字符配置文档,依然不知所云。然后看到一种做法,就是去改动/etc/mysql/mysqlf配置文件。改完之后,发现mysql无法重新启动了……呃,查看下/var/log/mysql/error.log,tail输出最后几行,发现刚刚添加的某个变量(default-character-set)是不合理的变量,所以报错了。遇到无法启动的问题,也过来查看下error.log好了。

最后是根据这篇资料改好的:

果然爆栈网上啥都有。

转述如下:

1. Remove that directive and you should be good.

2. Then your configuration file ('/etc/myf' for example) should look like that:

[mysqld]

collation-server = utf8_unicode_ci

init-connect='SET NAMES utf8'

character-set-server = utf8

3. Restart MySQL.

4. For making sure, your MySQL is UTF-8, run the following queries in your MySQL prompt:

- First query:

mysql> show variables like 'char%';

The output should look like:

+--------------------------+---------------------------------+

| Variable_name | Value |

+--------------------------+---------------------------------+

| character_set_client | utf8 |

| character_set_connection | utf8 |

| character_set_database | utf8 |

| character_set_filesystem | binary |

| character_set_results | utf8 |

| character_set_server | utf8 |

| character_set_system | utf8 |

| character_sets_dir | /usr/local/mysql/share/charsets/|

+--------------------------+---------------------------------+

- Second query:

mysql> show variables like 'collation%';

And the query output is:

+----------------------+-----------------+

| Variable_name | Value |

+----------------------+-----------------+

| collation_connection | utf8_general_ci |

| collation_database | utf8_unicode_ci |

| collation_server | utf8_unicode_ci |

+----------------------+-----------------+

不过试了之后,character_set_database还是latin1。当然这个回答中的评论还是提及一点,对于已经存在的数据库,你还需要ALTER TABLE Table CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;来更改它们的字符设置。

我试了下这个命令,终于把最后一个变量也改为utf8了。万岁!不过……MySQL还是会报错!还是同样的错!不知怎么会有这样的问题……因为我最后一怒之下把数据库全部重新建过,就没有这个问题了!(当然这些都是开发用的数据库,随便drop下也无所谓啦)

为什么MySQL居然使用latin1作为默认编码呢……在解决了问题后,我特意去查了下。看来这个貌似是个遗留历史问题:

真是的,凡是稍微大一点的东西总会有那么几个历史遗留问题~

本文发布于:2024-01-28 07:05:08,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17063967115663.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:mysql
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23