当前位置: 首页 > 面试题库 >

如何使MySQL正确处理UTF-8

欧阳洲
2023-03-14
问题内容

昨天我对一个问题的回答之一是建议我确保我的数据库可以正确处理UTF-8字符。我该如何使用MySQL?


问题答案:

更新:

简短答案-您几乎应该始终使用utf8mb4字符集和utf8mb4_unicode_ci排序规则。

更改数据库:

ALTER DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

看到:

  • 亚伦对此答案的评论如何使MySQL正确处理UTF-8

  • utf8_general_ci和utf8_unicode_ci有什么区别

  • 转换指南:https : //dev.mysql.com/doc/refman/5.5/en/charset-unicode-conversion.html

原始答案:

MySQL 4.1及更高版本具有默认字符集UTF-8。您可以在验证这个my.cnf文件,记得设置 两个 客户端和服务器(default- character-setcharacter-set-server)。

如果您希望将现有数据转换为UTF-8,请转储数据库,然后将其作为UTF-8导入,确保:

  • SET NAMES utf8在查询/插入数据库之前使用
  • DEFAULT CHARSET=utf8在创建新表时使用
  • 此时,您的MySQL客户端和服务器应位于UTF-8中(请参阅参考资料my.cnf)。请记住,您使用的任何语言(例如PHP)也必须是UTF-8。某些版本的PHP将使用他们自己的MySQL客户端库,该客户端库可能不支持UTF-8。

如果要迁移现有数据,请记住先备份!当事情没有按计划进行时,可能会发生很多奇怪的数据砍伐事件!

一些资源:

  • 完整的UTF-8迁移(cdbaby.com)
  • 关于php函数的UTF-8准备情况的文章(请注意,其中一些信息已过时)


 类似资料:
  • 问题内容: Java的I / O类,,,和他们的不同子类中都有一个可抛出的方法。 对于处理此类异常的正确方法是否存在共识? 我经常看到建议,只是默默地忽略它们,但这是错误的,至少在打开用于写的资源的情况下,关闭文件时出现问题可能意味着无法写入/发送未刷新的数据。 另一方面,在阅读资源时,我还不清楚为什么会抛出异常以及如何处理。 那么有什么标准建议吗? 问题答案: 记录下来。 您实际上不能 做任何事

  • 在我的REST API中,我有一个过滤器,该过滤器检查每个请求,以查看令牌是否是原样。下面是代码。 当用户登录到应用程序时,将调用上述代码。但是,令牌将在60分钟内过期。我知道,在令牌过期后,要么我必须带用户返回登录屏幕,要么刷新令牌。我把这里和这里的建议都看了一遍 但我不明白以下几点。 如何分配并将此令牌发送回用户?当前,当用户登录时,他将获得令牌并将其保存在一个变量中。为了使刷新的令牌工作,我

  • 我已经将我的nodejs应用程序配置为使用MongoDB。我可以成功地连接和添加数据到我的mongodb实例。我的应用程序配置如下(敏感信息编辑): 如果我点击endpoint,那么pizza文档就会很好地在数据库中创建,但我注意到连接从未关闭;这意味着endpoint从不将“all good”字符串作为响应发送。而且,对的任何后续请求都会抛出以下错误: 我似乎没有正确处理promise和asyn

  • 在 node.js中,通常的做法是将错误消息作为回调函数的第一个参数返回。在纯JS中有许多解决方案(promise,步骤,seq等),但它们似乎都无法与ICS集成。在不损失太多可读性的情况下处理错误的正确解决方案是什么? 例如:

  • 问题内容: 用Java产生和使用外部进程的流(IO)的正确方法是什么?据我所知,由于可能的缓冲区大小有限,因此应在与生成进程输入并行的线程中使用java结束输入流(进程输出)。 但是我不确定我是否最终需要与这些使用者线程进行同步,或者仅等待进程退出以使用方法就足够了,以确保所有进程输出实际上都被消耗了?IE是否有可能,即使进程退出(关闭其输出流),流的Java端仍存在未读数据?实际如何知道该过程何

  • 问题内容: 我有一个使用ncurses用C编写的程序。它让用户输入并显示它。如果用户输入utf8字符,它将无法正确显示。 我将输入的字符用户保存到文件中。而且我直接在Shell中将此文件正确显示。 我搜索了stackoverflow和google,并尝试了几种方法(例如与ncursesw链接)显示不正确。 我: 可以正确显示用户输入的内容。 如何使ncurses正确显示UTF-8字符? 使用ncu