mysql定义两种排序规则_关于mysql:如何更改数据库的默认排序规则?

我们以前的程序员在一个表(mysql)中设置了错误的排序规则。他用拉丁语排序法设置了它,当时应该是utf8,现在我有问题了。每一张中日文字的唱片都变成了????性格。

是否可以更改排序规则并返回字符的详细信息?

mysql alter table排序规则可能重复

更改数据库排序规则: ZZU1

更改表排序规则: ZZU1

更改列排序规则: ZZU1

更多信息:

utf8-general和utf8-unicode有什么区别?

utf8-general和utf8-unicode有什么区别

如何更改数据库、表、列的排序规则?

注意,CHARACTER SET utf8将默认为utf8_general_ci,但如果需要,也可以像这样定义排序规则ALTER DATABASE CHARACTER SET utf8 COLLATE utf8_unicode_ci;。

…我建议你测试一下。

只需说明第二个将排序规则更改为utf8_general_ci;如果要将其更改为utf8_unicode_ci,可以定义排序规则:ALTER TABLE CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;。正如@kcd指出的那样,这种方法在表上的工作方式与在数据库上的工作方式完全相同。

对于完全支持UTF8的ALTER DATABASE CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,最好执行以下操作。对于其他两个语句,您也应该这样做。

您真的需要使用"alter tablemodify…"吗?根据dev.mysql.com/doc/refman/5.5/en/alter-table.html,似乎"alter tableconvert to character set…"也会更改列?或者可能我没有正确阅读/理解手册。

下面介绍如何更改所有数据库/表/列。运行这些查询,它们将输出将整个方案转换为UTF8所需的所有后续查询。希望这有帮助!

--更改数据库默认排序规则 ZZU1

--更改表排序规则/字符集 ZZU1—4

--更改列排序规则/字符集 ZZU1

很好。!大约一个小时后,我正试图解决同一个问题。我使用了这3个命令,我看到字符集已经改变了。但主要的问题还是留给我。如果我直接写到数据库,那么在我的浏览器中一切都会很好地显示出来。但是如果我从网站表单中添加了一些内容,那么数据库中的结果仅仅是????????我有什么需要考虑的吗?我的网络应用程序是.NET MVC应用程序。

保存到将来项目的有用查询中。

我建议进行一些编辑,因为这些自动查询还不太安全。字符"最大"长度仍然有问题:当您从拉丁语-瑞典语-ci更改为utf8-unicode-ci时,原始字符可能太高。

这是一个很好的答案。我有三个意见/问题:1)为什么在列代码中使用"T1"?我觉得没必要。2)为什么"T1.data_type"(",T1.character_maximum_length,"")",而不仅仅是"T1.column_type"?3)为什么要混合使用大写和小写-表模式与表名称等?

注意,在MySQL中,EDOCX1字符集只是真正的utf8字符集的一个子集。为了节省一个字节的存储空间,MySQL团队决定只存储三个字节的utf8字符,而不是完整的四个字节。这意味着一些东亚语言和emoji并没有得到充分的支持。为了确保可以存储所有的utf8字符,请在MySQL中使用EDOCX1-1数据类型和EDOCX1-2或EDOCX1-3。

除了DavidWhittaker发布的内容之外,我还创建了一个查询,生成了完整的表和列alter语句,这些语句将转换每个表。跑步也许是个好主意

设置会话组concat max=100000;

首先要确保你的团队海螺不会超过这里看到的非常小的限制。 ZZU1

上一个答案的区别在于,它使用的是utf8而不是ut8mb4,使用的是T1.data类型和T1.character(按最大长度计算)对枚举无效。所以,我的查询排除了视图,因为这些视图必须单独修改。

我只是使用Perl脚本以数组的形式返回所有这些更改,并对它们进行迭代,修复了太长的列(通常它们是varchar(256),而数据中通常只有20个字符,所以这是一个简单的修复)。

我发现从Latin1->utf8mb4更改时有些数据已损坏。它似乎是utf8编码的拉丁字符,列中的1字符在转换过程中会出错。我只是简单地保存了来自列的数据,我知道这些列在修改前后会成为内存中的一个问题,并对它们进行比较,生成更新语句来修复数据。

这里很好地描述了这个过程。然而,一些不适合拉丁语的字符却永远消失了。utf-8是拉丁语1的超集。不是反过来。大多数将适合单字节空间,但任何未定义的将不适合(检查Latin1列表-并非所有256个字符都已定义,这取决于MySQL的Latin1定义)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值