Mysql 四字节汉字支持

2024-06-23

我无法执行这个 SQL 脚本:

INSERT INTO `mabase`.`new_table` (`idnew_table`, `name`) VALUES ('2', '????');

错误是:

错误 1366:第 1 行的列“name”的字符串值不正确:“\xF0\xA0\xBC\xAD” SQL语句: 插入mabase.new_table (idnew_table, name) 值 ('2', '????')

我的数据库和表采用 utf8 字符集和 utf8_general_ci 排序规则。 我也尝试过: utf8_unicode_ci, utf8mb4_general_ci, bg5_cinese_ci, gbk_cinese_ci。

我已经在 MySql 工作台中尝试了所有这些 在窗户上。

???? 是四字节字符。我只对他们有问题。 请告诉我如何在 mysql 中保存四个字节字符。


你想要的性格,U+20F2D http://www.fileformat.info/info/unicode/char/20f2d/,驻留在 Unicode 的“补充表意文字平面”的“CJK 统一表意文字扩展 B”块中,因此在 v5.5 之前的任何 MySQL Unicode 字符集中不可用;从 v5.5 开始,它可以在utf8mb4 http://dev.mysql.com/doc/en/charset-unicode-utf8mb4.html, utf16 http://dev.mysql.com/doc/en/charset-unicode-utf16.html, utf16le http://dev.mysql.com/doc/en/charset-unicode-utf16le.html and utf32 http://dev.mysql.com/doc/en/charset-unicode-utf32.html字符集。

它在 MySQL 中不可用big5 or gbk字符集。


Why the utf8编码不起作用

正如下面记录的统一码支持 http://dev.mysql.com/doc/refman/5.6/en/charset-unicode.html:

Unicode 支持的初始实现(在 MySQL 4.1 中)包括两个用于存储 Unicode 数据的字符集:

  • ucs2,Unicode 字符集的 UCS-2 编码,每个字符使用 16 位。

  • utf8,Unicode 字符集的 UTF-8 编码,每个字符使用一到三个字节。

这两个字符集支持 Unicode 版本 3.0 的基本多语言平面 (BMP) 中的字符。 BMP 字符具有以下特点:

  • 它们的代码值在 0 到 65535 之间(或U+0000 .. U+FFFF).

  • 它们可以用固定的 16 位字进行编码,如下所示ucs2.

  • 它们可以用 8、16 或 24 位进行编码,如下所示utf8.

  • 它们足以用于主要语言中的几乎所有字符。

上述字符集不支持的字符包括位于 BMP 之外的补充字符。 BMP 之外的字符作为替换字符进行比较并转换为'?'当转换为 Unicode 字符集时。

在 MySQL 5.6 中,Unicode 支持包括增补字符,这需要范围更广的新字符集,因此占用更多空间。下表显示了以前和当前 Unicode 支持的简要功能比较。



╔══════════════════════════════╦══════════════════════════════════════════════╗
║       Before MySQL 5.5MySQL 5.5 and up                ║
╠══════════════════════════════╬══════════════════════════════════════════════╣
║ All Unicode 3.0 characters   ║ All Unicode 5.0 and 6.0 characters           ║
╠══════════════════════════════╬══════════════════════════════════════════════╣
║ No supplementary characters  ║ With supplementary characters                ║
╠══════════════════════════════╬══════════════════════════════════════════════╣
║ ucs2 character set, BMP only ║ No change                                    ║
╠══════════════════════════════╬══════════════════════════════════════════════╣
║ utf8 character set for up to ║ No change                                    ║
║ three bytes, BMP only        ║                                              ║
╠══════════════════════════════╬══════════════════════════════════════════════╣
║                              ║ New utf8mb4 character set for up to four     ║
║                              ║ bytes, BMP or supplemental                   ║
╠══════════════════════════════╬══════════════════════════════════════════════╣
║                              ║ New utf16 character set, BMP or supplemental ║
╠══════════════════════════════╬══════════════════════════════════════════════╣
║                              ║ New utf16le character set, BMP or            ║
║                              ║ supplemental (5.6.1 and up)                  ║
╠══════════════════════════════╬══════════════════════════════════════════════╣
║                              ║ New utf32 character set, BMP or supplemental ║
╚══════════════════════════════╩══════════════════════════════════════════════╝
  

这些更改是向上兼容的。如果您想使用新的字符集,您的应用程序可能会出现不兼容问题;看第 10.1.11 节 “从以前的 Unicode 支持升级到当前的 Unicode 支持” http://dev.mysql.com/doc/en/charset-unicode-upgrading.html。该部分还描述了如何将表从utf8到(4字节)utf8mb4字符集,以及这样做可能适用的限制。

Why the big5编码不起作用

正如下面记录的使用Big5中文字符集需要注意哪些问题? http://dev.mysql.com/doc/en/faqs-cjk.html#qandaitem-B-11-1-3:

MySQL 支持香港和台湾(中华民国)常见的 Big5 字符集。 MySQL 的big5实际上是 Microsoft 代码页 950,与原始代码非常相似big5字符集。


[ deletia ]  

添加功能请求HKSCS已提交延期。需要此扩展的人可能会对 Bug #13577 的建议补丁感兴趣。

Why the gbk编码不起作用

正如下面记录的MySQL 中有哪些 CJK 字符集可用? http://dev.mysql.com/doc/en/faqs-cjk.html#qandaitem-B-11-1-1:

在这里,我们试图澄清哪些字符是合法的gb2312 or gbk,参考官方文档。请在报告前检查这些参考资料gb2312 or gbk bugs.

  • 如需完整列表gb2312字符,按照gb2312_chinese_ci整理:gb2312 http://www.collation-charts.org/mysql60/by-charset.html#gb2312

  • MySQL's gbk实际上是“Microsoft 代码页 936”。这个和官方的不一样gbk对于角色A1A4(中间的点),A1AA(破折号),A6E0-A6F5, and A8BB-A8C0.

  • 对于列表gbk/Unicode 映射,请参阅http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP936.TXT http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP936.TXT.

  • 对于 MySQL 的列表gbk字符,参见gbk http://www.collation-charts.org/mysql60/by-charset.html#gbk.

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

Mysql 四字节汉字支持 的相关文章

  • MySQL 设置自动增量“Ad Hoc”

    有没有办法以 临时 方式将 mysql 的 auto increment 设置为某个整数 例如 表中已删除 N 个最新行 因此主键 auto increment 与实际行数相差 N 有没有办法将 auto increment 设置为正确的数
  • 无法在 Windows 中安装 mysql-python(较新版本)

    I have mysql pythonv1 2 4 在我的机器 Windows 8 上安装得很好 我正在使用Python 2 7 每次尝试升级到 v1 2 5 时 我总是遇到以下错误 从 v1 3 7 开始仍然发生 C Users User
  • XAMPP、PROFTPD问题

    我已经在 macOS Mojave 上安装了 XAMPP 当我运行此命令 sudo Applications XAMPP xamppfiles xampp start 时 我收到以下错误 启动 Mac OS X 7 2 10 0 的 XAM
  • 如何将逗号分隔值传递给 MySql 中的存储过程?

    我有像这样的存储过程 CREATE DEFINER test PROCEDURE test get details in p istudid int in p icourseid int in p branchid varchar 20 B
  • 使用 C++ 连接器的 C++ mysql 连接 bad_alloc

    尝试建立一个简单的 mysql 连接 但得到一个bad alloc即使查看类似的帖子 我也不知道如何解决这个问题 这是我的代码 include
  • 数据库中无法识别的数据类型 nvarchar

    我尝试将 MySQL 服务器数据导入 PHPMyAdmin MySQL 数据库 无法识别的数据类型 nvarchar 发现 我的数据库排序规则设置为 utf general ci 您不必担心 nvarchar 消息 它是由 phpmyadm
  • 防止 Node.js 中的 SQL 注入

    是否有可能以与 PHP 具有防范 SQL 注入的预准备语句相同的方式防止 Node js 中的 SQL 注入 最好使用模块 如果是这样 怎么办 如果不 有哪些例子这可能会绕过我提供的代码 见下文 一些背景 我正在制作一个 Web 应用程序
  • 从条件表中获取 WHERE 子句的条件

    我创建了以下简单的DataModel 我用以下数据填充了表格 1 桌子Customer INSERT INTO test customer CustomerName Country RegistrationDate VALUES Custo
  • mysql 中的 SELECT UNION 和 ORDER BY.. 如何?

    我想从单个表中获取所有行 但以不同的方式对它们进行排序 例如我写 SELECT FROM table1 ORDER BY fieldA ASC LIMIT 3 UNION SELECT FROM table1 ORDER BY FieldB
  • 如何在数据库中存储世界各地的所有地理位置?

    我在一家旅游网站工作 我需要存储游客去过的旅游景点 我需要位置表中的地点是唯一的 以便我可以知道特定地点的受欢迎程度等 我还需要存储在我身边的所有国家 州 城市 因为我不能依赖用户输入 数据库是MySQL 看到这些位置的可用数据集 我发现存
  • LINQ 中的日期差异逻辑

    我尝试从两个不同的数据库表访问数据 然后使用 C 中的 LINQ 将它们连接到两个字段上 我相信我有一个逻辑合理的整体工作方法 我遇到的部分问题是 我在连接两个表之前过滤了它们的数据 因为这些表的数据太多 会导致崩溃 主要问题是 对于其中一
  • 如何将这种奇怪的字符串解码为UTF-8? (PHP)

    所以我有 u041E u043B u0435 u0433 20 u042F u043A如何将其保存为真正的 UTF 8 或 对我来说更好的是 HTML 实体 这就是 JavaScriptescape 格式 它与 URL 编码类似 但不兼容
  • mysql-connector-java 升级到 8.0.11 更改了从数据库检索的所有日期值

    对于 Spring 项目 mysql connector java已迁移自6 0 6 to 8 0 11 因此与8 0 11问题如下 Caused by com mysql cj exceptions InvalidConnectionAt
  • 两个sql查询的性能差异?

    我的表中有一个具有文本数据类型的字段 以下两个sql查询的性能是否有差异 select from tablename where fieldname xyz select from tablename where fieldname zyx
  • 有没有办法使用 ON DUPLICATE KEY 来更新我想要插入的所有内容?

    我知道你可以使用ON DUPLICATE KEY UPDATE如果已经有该键的记录 则更新某个值 我可以做这个 INSERT INTO tableName a b c VALUES 1 2 3 ON DUPLICATE KEY UPDATE
  • 在准备好的语句中使用“like”通配符

    我正在使用准备好的语句来执行 mysql 数据库查询 我想实现基于某种关键字的搜索功能 为此我需要使用LIKE关键字 我知道的就这么多 我以前也使用过准备好的语句 但我不知道如何使用它LIKE因为从下面的代码中我将在哪里添加 keyword
  • 在 MySQL 中使用 BLOB 或 VARBINARY 加密数据?

    我正在开发一个 PHP 应用程序 它通过文本区域接受用户输入 它将加密存储在数据库中 使用 AES ENCRYPT 我应该使用 BLOB 还是 VARBINARY 字段 这两种类型的字段都会对性能产生影响吗 BLOB 和 VARBINARY
  • 主键与主键

    创建包含数据库结构的 mysql 转储时 其中一张表显示以下内容 CREATE TABLE completedTransactions paymentId int 10 unsigned NOT NULL timestamp int 15
  • 比在配置文件中以纯文本形式存储 mysql 密码更好的方法吗?

    许多 PHP 程序要求用户将 mysql 密码以纯文本 字符串或常量 形式存储在应用程序根目录的配置文件中 这一直困扰着我 这么多年过去了 还有更好的方法吗 到目前为止 我已经提出了两个最小的安全提升方案 使用 htaccess 中的规则使
  • MySQL:ALTER IGNORE TABLE ADD UNIQUE,什么会被截断?

    我有一个包含 4 列的表 ID 类型 所有者 描述 ID 是 AUTO INCRMENT PRIMARY KEY 现在我想 ALTER IGNORE TABLE my table ADD UNIQUE type owner 当然 我几乎没有

随机推荐

  • ISODate 未定义

    我正在尝试使用 nodejs mongoose 从 mongodb 获取结果 var dateStr new Date year month day 0 0 0 var nextDate new Date year month day 23
  • Qt:使用 QObject::connect 指定多种连接类型

    我想知道是否可以指定多种连接类型 例如 我希望我的连接类型是排队连接和唯一连接 是否可以在一份声明中具体说明这一点 QObject connect ptrSender SIGNAL ptrReceiver SLOT Queued and u
  • 测试滚动

    在我的角度应用程序中 我有一个页面 侧面有导航链接 单击该链接时 会将页面向下滚动到匹配的元素 我如何在量角器中为此编写 e2e 测试 有没有类似 抓取第一个可见的 h1 之类的东西 您可以使用 javascript 的 window pa
  • java 如何检查字符串是否包含大写

    我正在开发一个程序 它允许用户输入字母数字键 并根据某些条件检查它是否是有效键 其中之一是该键是否包含大写字母 这是我到目前为止所尝试过的 else if key contains QWERTYUIOPASDFGHJKLZXCVBNM UI
  • 按对象的两个字段排序。爪哇

    我想按日期和名称排序 例如我有这样的约会 2019 01 01 CCCC 2019 02 01 Aaaa 2019 03 01 CCC 2019 02 01 BBBB 2019 03 01 Aaaa 2019 01 01 Aaaa 我需要按
  • JqG​​rid 搜索选项:工具栏搜索与标准搜索窗口

    我想允许用户仅使用一个 sopt 设置来过滤每一列 但对于更高级的搜索 对于高级用户 我想允许他们使用内置搜索按钮 但我想覆盖 odata 中列出的各个列搜索选项 例如 我希望我的用户只有 eq 但我希望高级用户能够从 odata 中进行选
  • 有什么理由不在 Grand Central Dispatch 队列中使用睡眠?

    我想让队列在循 环时等待一小段时间 我正在考虑我的选择 并正在测试暂停恢复队列 但这似乎需要几个移动部件 所以我正在考虑使用 sleep 或 usleep 来代替 这更多的是一个通用的线程函数 我想知道我是否应该避免使用睡眠 而是坚持使用
  • 为什么 while 循环停留在 raw_input 处? (Python)

    在下面的代码中 我尝试使用 python 脚本创建 更多 命令 unix 方法是将文件读入列表并一次打印 10 行 然后询问用户是否要打印接下来的 10 行 Print More txt 问题是 如果我给出 y 或 Y 作为输入并且不继续
  • 在哪里托管 Python 脚本?

    我知道这是一个非常基本的问题 但我正在挣扎 我现在知道自己想做什么 但不知道到底要通过谷歌搜索什么才能到达那里 我有一个小型 python 脚本 它运行一个 csv 使用 API 调用中的每一行 然后在 API 给出特定响应时将行添加到另一
  • getline() 与 ifstream 的意外行为

    为了简化 我尝试使用 ifstream 类及其 getline 成员函数读取 CSV 文件的内容 这是这个 CSV 文件 1 2 3 4 5 6 和代码 include
  • Node.js Express 网站实时更新数据

    我正在尝试实现一些我认为应该非常简单的事情 但我发现的所有教程和示例似乎都有点矫枉过正 我在做什么 我定期获取天气信息 并且我想在每次获取时更新网站上的文本 而无需用户刷新浏览器 几乎每个关于实时数据更新的教程都建议使用socket io
  • 将 0 更改为 1 或反之亦然的最优雅的方式

    做接下来的事情最优雅的方式是什么 int i oneOrZero if i 0 i 1 else i 0 你可以假设i只能有 1 或 0 值 i 1 XOR https en wikipedia org wiki Exclusive or值
  • 尽管是独立的,但在更改另一个 numpy 数组时,该数组会意外更改

    我在大型代码中发现了一个错误 并将问题简化为以下情况 虽然每一步我只改变w2 但是当我在每一步打印出来时w1 它也发生了变化 因为在第一个循环结束时我将它们分配为相等 我读过这篇文章 但上面写着以防我做w1 w2 它会解决问题 但并不能解决
  • ReactJS - 孩子如何找到其父母?

    ReactJS 有没有办法让组件知道它的父组件是谁 编辑1 不管这样做有什么好处 有办法吗 我还没有找到一种 React 方法来做到这一点 从我所看到的 这个想法是将回调从父级传递给子级 并且子级调用回调 不知道回调实际上是在父母 我尝试过
  • 无法加载 OpenCL 运行时 - OpenCV3 Python

    我有一个程序 在 Windows 上使用 OpenCV 2 4 9 python 中的前景检测来处理视频 并使用 py2exe 打包为 Windows 可执行文件 我最近将 opencv 更新为 opencv3 并重新打包了我的程序 当我在
  • 将类型“System.Dynamic.DynamicObject”转换为 System.Collections.IEnumerable

    我成功地使用 MVC3 中的 JavaScriptSerializer 将 json 字符串反序列化为动态对象 我不知道如何将其转换为我可以枚举的东西 下面的 foreach 代码行是我最新的尝试 但出现错误 无法将类型 System Dy
  • 如何使用 Expression 设置嵌套属性?

    所以我有一些代码可以设置对象的属性 此代码来自我们在单元测试中使用的内部验证类 所以代码可能会提供类似的东西 private static void SetDeepValue object targetObject Expression
  • 使用 JavaScript 从字符串中删除逗号

    我想从字符串中删除逗号并使用 JavaScript 计算这些金额 例如 我有这两个值 100 000 00 500 000 00 现在我想从这些字符串中删除逗号并想要这些金额的总数 要删除逗号 您需要使用replace https deve
  • 如何使用循环清除jframe的所有文本字段?

    我正在使用 NetBeans 开发 Java 应用程序 我有 5 个JTextFields and 2 JTextArea in JFrame 我想使用循环立即清除它们 如何做呢 迭代所有组件并设置所有组件的文本JTextField and
  • Mysql 四字节汉字支持

    我无法执行这个 SQL 脚本 INSERT INTO mabase new table idnew table name VALUES 2 错误是 错误 1366 第 1 行的列 name 的字符串值不正确 xF0 xA0 xBC xAD