如何在 MySQL 中存储 unicode?

Posted

技术标签:

【中文标题】如何在 MySQL 中存储 unicode?【英文标题】:How to store unicode in MySQL? 【发布时间】:2011-03-20 17:29:05 【问题描述】:

如何在免费版 mysql 中存储 Unicode?

似乎没有 SQL Server 中的 nvarchar 类型。 MySQL 不支持 Unicode 吗?我尝试使用text,但这也不起作用。

【问题讨论】:

【参考方案1】:

您需要为您的表格选择一个utf8_* 字符集。文本和备注字段将自动以 UTF-8 存储。 mySQL 6 即将支持 UTF-16。

【讨论】:

更新:自 5.5 版起引入 UTF-16 和 Emoji (utf8mb4) 支持:dev.mysql.com/doc/refman/5.5/en/charset-unicode.html 值得注意的是,根据您从数据库中检索数据的方式,可能还需要明确地让连接也使用 UTF-8。【参考方案2】:

给定字符串列(CHARVARCHAR*TEXT)的字符集由其character set and/or collation 确定。这是一个非常激烈的话题,所以最好阅读我链接的文档。例如:

CREATE TABLE t1
(
    col1 CHAR(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci
)

将创建一个带有col1 的表t1,以UTF-8 编码存储其内容。

【讨论】:

很好的解释和例子。谢谢@Stefan Gehrig 这个例子真的很有帮助。谢谢斯特凡 :-)【参考方案3】:

您是否尝试在连接后设置名称?尝试存储 unicode 字符的结果是什么?连接到 mysql 服务器并输入:

SET NAMES UTF8;

这应该打开对 utf8 的“支持”。然后尝试存储 utf 数据。

【讨论】:

【参考方案4】:

使用这个查询

alter table `DBNAME`.`TblName`  Engine=InnoDB checksum=1 comment='' delay_key_write=1 row_format=dynamic charset=utf8 collate=utf8_unicode_ci 

【讨论】:

“使用这个查询”没有解释是一个错误的答案。【参考方案5】:

我遵循自己的编码风格,所以在跟随我的领导时请考虑到这一点。

首先我创建了 MySql 数据库。

创建数据库后,在mysql命令提示符下输入命令:

SET NAMES = UTF8;

存储 unicode 的表和列将使用排序规则属性设置为 utf8-utf_general_ci。每一列要存储 unicode,都将被选中并将 collat​​ion 属性设置为 utf8-utf_general_ci。

现在在 C# 中。

我的连接字符串像往常一样设置,但添加了一个这样的属性:

constring = @"SERVER=localhost;" + @"PORT=3306;" + @"DATABASE=gayakidb;" + @"UID=root;" + @"PASSWORD=mysql;" + @"charset=utf8;";

接下来,在系统操作系统的“显示语言设置”中安装 unicode 字体。或者,您可以将字体文件(真类型文件)复制粘贴到操作系统的Fonts文件夹中。

然后我在属性页中设置文本框对象或任何其他工具对象的字体属性。

此外,如果您需要使用键盘输入 unicode 字体,则需要为键盘布局安装 unicode 语言。这可以使用操作系统的区域语言设置选项来完成。

完成。通过这些设置,我编写了用于保存数据的模块,并且在运行 ocde 时,它​​成功完成了工作。

【讨论】:

【参考方案6】: MySQL supports UTF-8。 使用 varchar 并为列设置编码(在 phpMyAdmin 中非常简单)

http://www.oreillynet.com/onlamp/blog/2006/01/turning_mysql_data_in_latin1_t.html - 我想这对你有帮助

【讨论】:

以上是关于如何在 MySQL 中存储 unicode?的主要内容,如果未能解决你的问题,请参考以下文章

如何将Unicode字符存储在数组中?

如何以 unicode (BE) 格式将数据存储在 CFDataRef 中?

如何在mysql数据库中鎒moji特殊字符

MySQL 不想存储 unicode 字符

Python & MySql:Unicode 和编码

如何过滤(或替换)在 UTF-8 中占用超过 3 个字节的 unicode 字符?