在 MySql 中读/写 unicode 数据

Posted

技术标签:

【中文标题】在 MySql 中读/写 unicode 数据【英文标题】:read/write unicode data in MySql 【发布时间】:2010-11-26 00:56:17 【问题描述】:

我正在使用 mysql DB 并希望能够读取和写入 unicode 数据值。例如,法语/希腊语/希伯来语值。

我的客户端程序是 C# (.NET framework 3.5)。

如何配置我的数据库以允许使用 unicode?以及如何使用 C# 从 MySql 读取/写入 unicode 值?

更新:09 年 9 月 7 日

好的,所以我的架构、表和列设置为“utf8”+排序规则“utf8_general_ci”。打开连接时,我运行“设置名称 utf8”。到目前为止一切都很好......但是,仍然将值保存为 '??????? '

有什么想法吗?

解决方案!

好的,所以 C# 客户端要读取和写入 unicode 值,您必须在 连接字符串中包含:charset=utf8

例如:server=my_sql_server;user id=my_user;password=my_password;database=some_db123;charset=utf8;

当然你也应该将相关表定义为utf8 + collat​​ion utf8_bin。

【问题讨论】:

【参考方案1】:

解决方案!

好的,所以 C# 客户端要读取和写入 unicode 值,您必须在连接字符串中包含:charset=utf8

例如:server=my_sql_server;user id=my_user;password=my_password;database=some_db123;charset=utf8;

当然你也应该将相关表定义为utf8 + collat​​ion utf8_bin。

【讨论】:

谢谢,我也遇到了这个问题,你的回答帮助了:)。 就像额外的 SCHEMA/DATABASE 创建:CREATE SCHEMA your_database CHARACTER SET utf8 COLLATE utf8_bin;【参考方案2】:

您必须为您的 MySQL 架构、表甚至列设置排序规则。

大多数时候,使用utf8_general_ci 排序规则是因为它不区分大小写和重音不敏感的比较。

另一方面,utf8_unicode_ci 区分大小写并使用更高级的排序技术(例如在 'ss' 附近排序 eszet ('ß'))。这个排序规则比其他两个排序慢一点。

最后,utf8_bin 使用它们的二进制值比较字符串。因此,它也是区分大小写的。

如果您使用 MySQL 的 Connector/NET(我推荐),那么一切都会顺利进行。

【讨论】:

【参考方案3】:

尝试在任何其他获取或发送之前使用此查询:

SET NAMES UTF8

【讨论】:

【参考方案4】:

您需要将 db 字符集设置为 UTF-8(如果您使用的是 utf-8),将相关表/字段排序为 utf,在执行查询之前执行 SET NAMES 'UTF-8',当然还要确保您在显示输出的 html 中设置了正确的编码。

【讨论】:

对于排序规则,我有几个值可供选择,例如:utf_bin、utf8_general_ci、utf8_unicode_ci 等。首选的是什么? 另外,你能给出一个使用“SET NAMES”的 INSERT & SELECT 的 SQL 查询示例吗? Collat​​ion 告诉 MySQL 按字母顺序排序数据的规则,如果您希望支持特定语言,请检查是否存在特定规则集,否则使用通用规则集之一。每个已建立的连接只需要运行一次 SET NAMES。

以上是关于在 MySql 中读/写 unicode 数据的主要内容,如果未能解决你的问题,请参考以下文章

Cordova 可以在 iOS“文件”应用程序中读/写文件吗?

关于从文件中读数据,将字符串写到文件中的操作

在 Julia 中读/写进程内存

为啥 fstream 在这里不起作用(在文件中读/写)?

如何在 .Net Core 中读/写文件?

如何在 perl 中读/写命名管道?