utf8mb4_unicode_ci 与 utf8mb4_bin

2024-02-03

首先让我们看看我是否做对了:

字符集是一组符号和编码。排序规则是用于比较字符集中字符的一组规则。

我应该使用 utf8mb4,因为 mysql utf8 是一种欺诈,最多 3 字节,而不是 PHP 中真正的最多 4 字节真正的 utf8 字符集。

因此,utf8mb4 是一个字符集,utf8mb4_unicode_ci/utf8mb4_bin 是他许多不同的可用排序规则中的 2 个。

utf8_unicode_ci 进行不区分大小写的比较和其他特殊比较(例如,我听说它会混淆法语中的所有口音)。 utf8_bin 区分大小写,因为它比较字符的二进制值。

现在的问题是:

  1. 例如,如果我想允许使用 utf8mb4_unicode_ci 区分大小写的登录名,我将不得不执行以下操作:

    SELECT name FROM table WHERE BINARY name = 'MyNaMEiSFUlloFUPPERCases';
    
  2. 例如,如果我想允许使用 utf8mb4_bin 进行不区分大小写的搜索,我将不得不执行以下操作:

    SELECT name FROM table WHERE LOWER(name) LIKE '%myname%'
    
  3. 那么哪一个更好呢?我听到的有关 utf8_unicode_ci 和重音符号/其他特殊字符的坏消息怎么样?

谢谢 :)


你“把事情做好”了吗?是的,除了我认为在 utf8mb4_unicode_520_ci 中比较法国口音是“正确的”。

你的两个SELECTs都会进行全表扫描,从而效率低下。原因是您正在覆盖排序规则(对于 #1)或隐藏函数中的列(LOWER,对于#2)或使用前导通配符(LIKE %...).

如果你想让它高效,声明name to be COLLATION utf8mb4_bin并简单地做WHERE name = ....

您认为其中一些等价项和顺序对于法语来说“不正确”吗?

A=a=ª=À=Á=Â=Ã=Ä=Å=à=á=â=ã=ä=å=Ā=ā=Ą=ą  Aa  ae=Æ=æ  az  B=b  C=c=Ç=ç=Ć=ć=Č=č  ch  cz
D=d=Ð=ð=Ď=ď  dz  E=e=È=É=Ê=Ë=è=é=ê=ë=Ē=ē=Ĕ=ĕ=Ė=ė=Ę=ę=Ě=ě  F=f  fz  ƒ  G=g=Ğ=ğ=Ģ=ģ
gz  H=h  hz  I=i=Ì=Í=Î=Ï=ì=í=î=ï=Ī=ī=Į=į=İ  ij=ij  iz  ı  J=j  K=k=Ķ=ķ
L=l=Ĺ=ĺ=Ļ=ļ=Ł=ł  lj=LJ=Lj=lj  ll  lz  M=m  N=n=Ñ=ñ=Ń=ń=Ņ=ņ=Ň=ň  nz
O=o=º=Ò=Ó=Ô=Õ=Ö=Ø=ò=ó=ô=õ=ö=ø  oe=Œ=œ  oz  P=p  Q=q  R=r=Ř=ř  S=s=Ś=ś=Ş=ş=Š=š  sh
ss=ß  sz  T=t=Ť=ť  TM=tm=™  tz  U=u=Ù=Ú=Û=Ü=ù=ú=û=ü=Ū=ū=Ů=ů=Ų=ų  ue  uz  V=v  W=w  X=x
Y=y=Ý=ý=ÿ=Ÿ  yz  Z=z=Ź=ź=Ż=ż=Ž=ž  zh  zz  Þ=þ  µ

更多 utf8 排序规则 http://mysql.rjweb.org/utf8_collations.html . 8.0 和 utf8mb4 排序规则 http://mysql.rjweb.org/utf8mb4_collations.html .

“520”(较新)版本不处理Æ, Ð, Ł, and Ø作为一个单独的“字母”,也许还有其他东西。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

utf8mb4_unicode_ci 与 utf8mb4_bin 的相关文章

随机推荐

  • 使用 Rollup 和外部依赖项部署 Angular 2 应用程序 Aot

    我已经实现了一个 Angular 2 应用程序 它利用Kendo UI 网格 http www telerik com kendo angular ui 使用 AoT Rollup 部署应用程序时我陷入困境 错误 GridModule 未由
  • 休眠禁用缓存

    我想禁用休眠缓存 session setCacheMode CacheMode IGNORE 不起作用 query setCacheable false 也不起作用 此外 我可以以某种方式配置不为对象 X Y 执行缓存 但为对象 Z 执行缓
  • SQL 脚本到 SSIS 表达式

    我有下面的 T SQL 查询行 我正在尝试将其转换为 Visual Studio SSIS 表达式到派生列任务 So tableA刚刚 Work item Submission no 列 但我需要将它们分成两列 例如SubmissionCo
  • PHP 与 GET 请求的切换

    我正在为我的网站构建一个简单的管理区域 我希望 URL 看起来像这样 http mysite com admin home http mysite com admin settings http mysite com admin users
  • R grep 多列搜索模式

    我有一个数据框 如下所示 Col1 Col2 Col3 A B C D E F G H I 我试图保持与 Col2 中的 B 或 Col3 中的 F 匹配的行 以获得 Col1 Col2 Col3 A B C D E F I tried d
  • 如何使用 vb.net 将数据获取到数据库(类、模块和表单)

    我希望标题足以理解我的问题 我已经安装了运行 ADO NET 所需的东西 我的模块中已经有一个连接字符串 并且我的类中已经有一个数据查询 Imports System Data Imports System Data OleDb Modul
  • 如何使用 Razor MVC 显示文件夹中的图像?

    我正在使用 Razor MVC 我想显示 Content uploads 文件夹中的图像 我想出了以下解决方案 foreach FileInfo fileInfo in new DirectoryInfo Server MapPath Co
  • MSEdge 无法启动:崩溃(chrome 无法访问)

    我是 Selenium python 的初学者 我尝试使用以下代码使用现有配置文件 默认 调用 Edge 浏览器 但一旦执行开始 它就会抛出以下异常 有人可以帮我解决这个问题吗 我错过了什么吗 edge options webdriver
  • 当鼠标位于旋钮图像上时,如何将图像放在 jslider 的旋钮图像上

    当鼠标位于旋钮图像上时 我需要将图像放在 jslider 的旋钮图像上 我做过这样的事情 slider new Slider s new mySliderUI slider slider png slider setUI s slider
  • 在 Puppet 中迭代哈希键/值

    我正在尝试使用 Puppet 来更新 ASP NET web config 中的任意应用程序设置列表 用于部署目的 但我陷入了困境 主要是因为我是一个真正的 puppet 专家 我有这个 yaml 文件 hiera appSettings
  • “复数或单数生成的对象名称”设置是什么意思?

    设置新的实体数据模型时 可以选择 x 将生成的对象名称复数或单数化 我注意到这也是 LINQ 中的一个选项 另外 现在我正在研究 ADO NET 实体框架 我注意到它还有 DEFAULT 来 复数或单数生成的对象名称 设置 实体数据模型 时
  • Android Studio 中按 Enter 键换行?

    我刚刚开始使用 Android Studio 当我编辑 activity main xml 时 我无法通过按 Enter 键转到新行 另外 我尝试插入新字母 但新字母刚刚被替换 所以我到处点击以使输入键起作用 然后突然我得到了新的一行 我不
  • 如何使用MinGW Windres编译资源文件?

    我的最终目标是设置使用 MinGW gcc g 编译的可执行文件的版本 在属性 gt 详细信息中显示 但现在我想用 Windres 编译一个资源文件 以便稍后能够手动链接它 但是当我使用此命令时出现以下错误 windres resource
  • 通过批处理文件(.bat)编译 Inno Setup 项目

    在我的工作项目中 我们必须使用 Inno Setup 创建 4 个安装程序 这样 我必须逐个文件运行 这最终会占用我更多的时间 文件 iss setup prog 01 iss setup prog 02 iss setup prog 03
  • 解析 HTTParty 响应

    我正在使用 HTTParty 提取 Facebook 用户的书籍列表 但在解析响应时遇到问题 Facebook 以这种方式返回数据 data name Title category Book id 21192118877902 create
  • Mac上像Cloud App一样自动截图上传

    云应用程序 http getcloudapp com 有这个巧妙的功能 当新的屏幕截图添加到桌面时 它会自动上传它们 有什么想法如何做到这一点吗 您可以自己做类似的事情 而无需太多编程方式 在操作系统中 您可以配置 文件夹操作 http w
  • Android自定义视图组委托addView

    我想实现自定义ViewGroup就我而言 源自FrameLayout但我希望从 xml 添加的所有子视图不直接添加到此视图中 而是添加到FrameLayout包含在这个习俗中ViewGroup 让我举个例子来说明这一点
  • 缺少必需的模块 Firebase - Jenkins 构建错误

    我已经配置了 jenkins 来构建我的 ios swift 应用程序 我用过 xcode 版本 8 1 和 swift 版本 3 我是 Jenkins 的新手 并继续集成过程 根据我的控制台输出 我认为构建成功 因为控制台输出像这样打印
  • java.lang.UnsupportedOperationException:AdapterView 中不支持 addView(View, LayoutParams)

    我正在使用网上找到的 Expandable ListView 示例 活动 public class ExpandableListViewActivity extends ExpandableListActivity strings for
  • utf8mb4_unicode_ci 与 utf8mb4_bin

    首先让我们看看我是否做对了 字符集是一组符号和编码 排序规则是用于比较字符集中字符的一组规则 我应该使用 utf8mb4 因为 mysql utf8 是一种欺诈 最多 3 字节 而不是 PHP 中真正的最多 4 字节真正的 utf8 字符集