几天前,当我处于开发状态时,在命令use my_dev_database之后,我碰巧在mysql上使用以下命令将字符集应用于特定的数据库:
SET NAMES utf8mb4 COLLATE utf8mb4_general_ci;
我打算使用这个命令来更改"character_set_client“和"character_set_results”。但是,这个命令恰好导致在同一台服务器上为其他数据库(可能是所有数据库)设置字符,包括我工作的webSite的数据库。我很惊讶!但是经过十几秒钟后,其他数据库的字符集被自动恢复,而用于my_dev_database的数据库仍然维护修改过的字符集。
我不明白mysql这种奇怪的行为。在我工作网站的第二天发生了什么?如果有用户在此期间提交帖子,修改后的字符集将保存在mysql服务器上我的工作网站的数据库中?
我真的很担心这个。如有任何建议,将不胜感激。
发布于 2018-02-17 02:56:51
不,它不会改变数据库的字符集;它会改变数据的解释。
更准确地说,SET NAMES声明了客户端的编码。此外,当数据(通过INSERT/SELECT)移动到/离开服务器时,它将从SET NAMES字符集转换为声明为的任何字符集。
因此,似乎只有其他数据库被更改了,并且恢复了。烟雾和镜子。
请参阅https://stackoverflow.com/questions/38363566/trouble-with-utf8-characters-what-i-see-is-not-what-i-stored中的“最佳实践”,以了解需要在多个地方设置utf8mb4,以使MySQL具有一致、平稳的运行。
utf8mb4是正确的方法;排序是次要的问题。
https://stackoverflow.com/questions/48781786
复制相似问题