在 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 + collation utf8_bin。
【问题讨论】:
【参考方案1】:解决方案!
好的,所以 C# 客户端要读取和写入 unicode 值,您必须在连接字符串中包含:charset=utf8
例如:server=my_sql_server;user id=my_user;password=my_password;database=some_db123;charset=utf8;
当然你也应该将相关表定义为utf8 + collation 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 查询示例吗? Collation 告诉 MySQL 按字母顺序排序数据的规则,如果您希望支持特定语言,请检查是否存在特定规则集,否则使用通用规则集之一。每个已建立的连接只需要运行一次 SET NAMES。以上是关于在 MySql 中读/写 unicode 数据的主要内容,如果未能解决你的问题,请参考以下文章